2017-02-27 1 views
2

다중 프로세스를 사용하여 다른 프로세스의 "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¶ (서버 프로세스 부분)를 참조하십시오.

관련 문제