使用多处理从不同的进程追加到同一个列表
问题描述
我需要使用 multiprocessing 将来自不同进程的对象附加到一个列表 L
,但它返回空列表.如何让许多进程使用多处理附加到列表 L
?
I need to append objects to one list L
from different processes using multiprocessing , but it returns empty list.
How can I let many processes append to list L
using multiprocessing?
#!/usr/bin/python
from multiprocessing import Process
L=[]
def dothing(i,j):
L.append("anything")
print i
if __name__ == "__main__":
processes=[]
for i in range(5):
p=Process(target=dothing,args=(i,None))
p.start()
processes.append(p)
for p in processes:
p.join()
print L
解决方案
全局变量在进程之间不共享.
Global variables are not shared between processes.
您需要使用 multiprocessing.Manager.list
:
You need to use multiprocessing.Manager.list
:
from multiprocessing import Process, Manager
def dothing(L, i): # the managed list `L` passed explicitly.
L.append("anything")
if __name__ == "__main__":
with Manager() as manager:
L = manager.list() # <-- can be shared between processes.
processes = []
for i in range(5):
p = Process(target=dothing, args=(L,i)) # Passing the list
p.start()
processes.append(p)
for p in processes:
p.join()
print L
参见进程间共享状态¶(服务器进程部分).
相关文章