2010-03-08 2 views
3

다음은 내가 작성한 테스트 케이스입니다. 왜 모든 프로세스가 1에서 5까지의 숫자를 인쇄하고 프로세스에서 나뉘어지지 않는 숫자입니까?왜이 python 큐는 항목을 여러 번 처리합니까?

코드 :

#!/usr/bin/python 
from subprocess import * 

from Queue import Queue 
from Queue import Empty 

import multiprocessing 
from multiprocessing import Process 

def main(): 
    r = Runner() 
    r.run() 

class Runner(object): 
    processes = [] 

    def run(self): 
     q = Queue() 
     for t in range(1,6): 
      q.put(t) 

     for pi in range(1,4): 
      p = Process(target=self.runFromQueue, args=(q,)) 
      p.start() 
      self.processes.append(p) 

     for p in self.processes: 
      p.join() 

     print "Finished!" 

    def runFromQueue(self, q): 
     try: 
      while True: 
       number = q.get_nowait() 
       print str(number) 
       q.task_done() 

     except Empty: 
      pass 


if __name__ == "__main__": 
    main() 

OUPUT :

$ ./test_threads.py 
1 
2 
3 
4 
5 
1 
1 
2 
3 
2 
4 
3 
5 
4 
5 
Finished! 

예상 OUPUT :

$ ./test_threads.py 
1 
2 
3 
4 
5 
Finished! 

답변

8

큐 패키지 인식 처리되지, 그것은 단지 스레드를 작동합니다. 다음은 귀하의 예제에서 일어나는 :

  1. 대기열을 작성하고 숫자
  2. 포크 4 프로세스와 입력합니다. 채워진 큐
  3. 포함하여 각 하위 프로세스로 복사합니다 메모리의 내용은 각 프로세스는 큐 당신은 멀티 프로세싱에 의해 제공되는 Queue 클래스를 사용할 필요는

의 복사본을 비 웁니다.

+0

그래,이게 그거야. 감사! –

관련 문제