python多处理队列卡住了

时间:2017-12-28 22:22:24

标签: python queue multiprocessing

我正在研究从一个队列中读取项目的程序,修改它并将其推送到第二个队列。由于计算上昂贵的修改功能,这应该由多个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()

1 个答案:

答案 0 :(得分:1)

为了能够在流程之间共享您的队列,您必须使用.Net fiddle创建它们:

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

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