擅长:python、mysql、java
<p>您可能对使用<a href="https://docs.python.org/3/library/multiprocessing.html#multiprocessing.managers.SyncManager" rel="nofollow noreferrer">SyncManager</a>感兴趣。只需确保在结束时调用<code>shutdown</code>关闭管理器,这样就不会留下僵尸进程</p>
<pre class="lang-py prettyprint-override"><code>from multiprocessing.managers import SyncManager
from multiprocessing import Process
import signal
my_manager = SyncManager()
# to avoid closing the manager by ctrl+C. be sure to handle KeyboardInterrupt errors and close the manager accordingly
def manager_init():
signal.signal(signal.SIGINT, signal.SIG_IGN)
my_manager.start(manager_init)
my_dict = my_manager.dict()
my_dict["clients"] = my_manager.list()
def my_process(my_id, the_dict):
for i in range(3):
the_dict["clients"].append(f"{my_id}_{i}")
processes = []
for j in range(4):
processes.append(Process(target=my_process, args=(j,my_dict)))
for p in processes:
p.start()
for p in processes:
p.join()
print(my_dict["clients"])
# ['0_0', '2_0', '0_1', '3_0', '1_0', '0_2', '1_1', '2_1', '3_1', '1_2', '2_2', '3_2']
my_manager.shutdown()
</code></pre>