0

次の Python マルチプロセッシング コードの何が問題なのかわかりません。終了しません。どんな提案でも大歓迎です。

from multiprocessing import Process, Queue, Lock

def hello(num, myqueue):
   while True:
      item = myqueue.get()
      print 'Thread ', num, 'got', item
   return

def put_on_queue(myqueue):
   for i in range(10):
      myqueue.put(i)
   return

if __name__ == '__main__':
   processes = []

   myqueue = Queue()

   for i in range(4):
      proc = Process(target = hello, args = (i, myqueue))
      proc.start()
      processes.append(proc)

   put_on_queue(myqueue)

   for proc in processes:
       proc.join()

- - - - - - - 編集 - - - - - - - - -

OK、受け取ったコメントとオンラインヘルプに基づいて、コードを次のように修正しました。まだ運がない:-(

def hello(num, myqueue):
  while not exit_flag:
     item = myqueue.get(False,5)
     print 'Thread ', num, 'got', item
  return


def put_on_queue(myqueue):
  global exit_flag 
  for i in range(10):         
     myqueue.put(i)

   while not myqueue.empty():
      pass
   exit_flag = 1

   return

if __name__ == '__main__':
  mylock = Lock()
  processes = []
  myqueue = Queue()

  exit_flag = 0

  for i in range(4):
     proc = Process(target = hello, args = (i, myqueue))
     #proc.daemon = True
     proc.start()
     processes.append(proc)

  put_on_queue(myqueue)

  for proc in processes:
     proc.join()
4

1 に答える 1

1

関数内に無限ループがありますhello。センティネントを最後の値としてキューに入れ、チェックしてループから抜け出す必要があります。

于 2012-07-25T02:00:21.230 に答える