python中的multiprocessing.process用于并行进程使用共享队列中的值

时间:2018-09-23 19:22:52

标签: python parallel-processing multiprocessing multiprocessing-manager

我正在尝试利用python多处理池从共享队列中获取值并在工作进程中使用。

import multiprocessing

def myTask(queue):
   while not queue.empty():     
       value = queue.get()
       print "Process {} Popped {} from the shared Queue".format(multiprocessing.current_process().pid, value)
       queue.task_done()

def main():
   m = multiprocessing.Manager()
   sharedQueue = m.Queue()
   sharedQueue.put(2)
   sharedQueue.put(3)
   sharedQueue.put(4)
   sharedQueue.put(5)
   sharedQueue.put(6)
   pool = multiprocessing.Pool(processes=3)
   pool.apply_async(myTask, args=(sharedQueue,))
   pool.close()
   pool.join()
if __name__ == '__main__':
    main()

从我得到的输出中,我看到仅启动了一个进程,该进程从队列中取出了所有值。我如何并行产生多个不断从队列中获取值的进程。我确实对进程数有一个最大限制,该数目可能大于队列大小。请在这方面指导我。谢谢。

PS:这只是一个例子。实际的任务是将数据从一种形式迁移到另一种形式,并对数据进行一些繁重的操作。

更新:我做了以下修改,并且看起来很有效,除了pool.join()阻止主进程退出,即使所有子进程都退出了。

pool = multiprocessing.Pool(processes=4)
while not sharedQueue.empty():
   pool.apply_async(myTask, args=(sharedQueue,))
pool.close()
#pool.join()

def myTask(queue):
   value = queue.get()
   print "Process {} Popped {} from the shared   Queue".format(multiprocessing.current_process().pid, value)
   queue.task_done()

0 个答案:

没有答案