2017-02-27 12 views
2

マルチプロセスを使って異なるプロセスから1つのリスト "L"にオブジェクトを追加する必要がありますが、空のリストを返します。 どのようにして、多くのプロセスがマルチプロセッシングを使って "L"をリストに追加できるようにすることができますか?Python:マルチプロセスを使って異なるプロセスから同じリストに追加する

#!/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 

答えて

3

グローバル変数はプロセス間で共有されません。

あなたは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 

Sharing state between processes¶Serverプロセス一部)を参照してください。

関連する問題