问题描述
我需要使用 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
参见进程间共享状态?(服务器进程部分).