简体   繁体   English

Python多处理队列卡住

[英]python multiprocessing queue stuck

I am working on program that reads items from one queue, modify that and push it to second queue. 我正在研究从一个队列中读取项目,对其进行修改并将其推送到第二个队列的程序。 This should be done by multiple CPU due to computationally expensive modify function. 由于计算量大的修改功能,这应该由多个CPU完成。 Program is stuck in printing loop print(qOut.get()). 程序卡在打印循环print(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()

In order to be able to share your queues between processes you must create them using a Manager : 为了能够在进程之间共享队列,您必须使用Manager创建它们:

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

Managers provide a way to create data which can be shared between different processes, including sharing over a network between processes running on different machines . 管理器提供了一种创建可以在不同进程之间共享的数据的方法,包括通过网络在不同机器上运行的进程之间共享

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM