Python多处理队列卡住了



我正在开发从一个队列中读取项目的程序,对其进行修改并将其推送到第二个队列。由于计算昂贵的修改功能,这应该由多个 CPU 完成。程序卡在打印循环打印(qOut.get(((中。

from multiprocessing import Pool, Queue
def update(qIn,qOut):
   temp=qIn.get()
   #this is going to be computationally expensive function
   qOut.put(temp+1)

def main():
    #input queue
    qIn=Queue()
    #output queue
    qOut=Queue()
    #set input queue
    for i in range(10):
        qIn.put(i)
    #set number of CPU cores
    p=Pool(6)
    #update each item in qIn and push it to qOut
    for i in range(10):
        p.apply_async(update, args=(qIn,qOut))
    p.close()
    p.join()
    #check qOut
    for i  in range(10):
         print(qOut.get())

if __name__ == '__main__':
    main()

为了能够在进程之间共享队列,您必须使用管理器创建它们:

manager = multiprocessing.Manager()
qIn = manager.Queue()
qOut = manager.Queue()

管理器提供了一种创建可在不同进程之间共享的数据的方法,包括在不同机器上运行的进程之间通过网络共享

相关内容

  • 没有找到相关文章

最新更新