Multiprocessing Queue in Python

后端 未结 5 894
抹茶落季
抹茶落季 2020-12-07 23:48

I\'m trying to use a queue with the multiprocessing library in Python. After executing the code below (the print statements work), but the processes do not quit after I call

5条回答
  •  离开以前
    2020-12-08 00:11

    Your workers need a sentinel to terminate, or they will just sit on the blocking reads. Note that using sleep on the Q instead of join on the P lets you display status information etc.
    My preferred template is:

    def worker(q,nameStr):
      print 'Worker %s started' %nameStr
      while True:
         item = q.get()
         if item is None: # detect sentinel
           break
         print '%s processed %s' % (nameStr,item) # do something useful
         q.task_done()
      print 'Worker %s Finished' % nameStr
      q.task_done()
    
    q = multiprocessing.JoinableQueue()
    procs = []
    for i in range(num_procs):
      nameStr = 'Worker_'+str(i)
      p = multiprocessing.Process(target=worker, args=(q,nameStr))
      p.daemon = True
      p.start()
      procs.append(p)
    
    source = ['hi','there','how','are','you','doing']
    for item in source:
      q.put(item)
    
    for i in range(num_procs):
      q.put(None) # send termination sentinel, one for each process
    
    while not q.empty(): # wait for processing to finish
      sleep(1)   # manage timeouts and status updates etc.
    

提交回复
热议问题