2012-03-10 6 views
0

출력은 다음과 같이, 그래서 이상한 내가 실행 함수에서 생각으로, 그것은 또한 출력해야 목록 데이터
목록 실행 []
APPEND 목록에서 데이터를 액세스 할 수있는 서브 프로세스, [1]
에서 실행 []
APPEND 목록 [1, 2]
에서 실행 [] APPEND 목록 [1, 2, 3]
에서 실행 []
APPEND 목록 [1, 2, 3, , 4]
list running []
append l IST [1, 2, 3, 4, 5]
왜 파이썬

from multiprocessing import Process 

class A(Process): 

    def __init__(self): 
     Process.__init__(self) 
     self.list = [] 

    def append_list(self, item): 
     self.list.append(item) 
     print 'append list', self.list 

    def run(self): 
     while True: 
      print 'list running', self.list 
      import time 
      time.sleep(2) 
a = A() 
a.start() 

i = 0 
while True: 
    i+=1 
    import time 
    time.sleep(2) 
    a.append_list(i) 

답변

2

이 과정 클래스의 함수를 호출하고 있다는 사실, 그것은 하위 프로세스에서 실행되는 것을 의미하지 않는다.

A 개체를 만들 때 목록이 주 프로세스에 있습니다. start()을 실행하면 목록이 자식 프로세스에 복사됩니다 (정확히는 아니지만 간단하게 가정합니다). 상위 프로세스가 함수를 호출하면 상위 프로세스의 메모리에만있는 목록에 추가됩니다. 자식의 이름은 같은 이름이지만 다른 파이썬 프로세스에 속합니다.

프로세스간에 상태를 공유하려면 공유 메모리 개체 또는 큐 개체를 사용해야합니다. 답변에 대한

http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes

+0

덕분에, 나는이 문제를 해결하기 위해 파이프를 사용 : 여기를 참조하십시오. 감사. –

관련 문제