我正在开发从一个队列中读取项目的程序,对其进行修改并将其推送到第二个队列。由于计算昂贵的修改功能,这应该由多个 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()
管理器提供了一种创建可在不同进程之间共享的数据的方法,包括在不同机器上运行的进程之间通过网络共享。