我正在研究从一个队列中读取项目的程序,修改它并将其推送到第二个队列。由于计算上昂贵的修改功能,这应该由多个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()
答案 0 :(得分:1)
为了能够在流程之间共享您的队列,您必须使用.Net fiddle创建它们:
manager = multiprocessing.Manager()
qIn = manager.Queue()
qOut = manager.Queue()
管理器提供了一种创建可在不同进程之间共享的数据的方法,包括在不同计算机上运行的进程之间通过网络共享。