我正在尝试使用子进程工作程序编写脚本以一次下载多个文件。整个过程看起来有点像:
Manager Process
├ Worker
├ Worker
├ Worker
└ Worker
我使用multiprocessing.JoinableQueue
获得了类似的内容,其中包含指向在Manager Process中创建的文件的链接,而工作人员则get()
从中获取文件URL。整个过程运行直到队列为空,但没有办法暂停下载。现在我正在尝试在父进程和子进程之间创建异步通信,所以我可以这样做:
Worker » Manager: "Give me new link"
Manager » Worker: Gives new link
(Worker starts downloading)
或:
Worker » Manager: "Give me new link"
Manager » Worker: "Wait for now"
(Worker is waiting)
Manager » Worker: "I've got new job for you"
(Worker starts downloading)
添加更多工人,我们有:
Worker1 » Manager: "Give me new link"
Worker2 » Manager: "Give me new link"
Manager » Worker1: Gives new link
(Worker1 starts downloading)
Manager » Worker2: Gives new link
(Worker2 starts downloading)
不幸的是我不知道如何实现这样的通信,我想在没有外部包的情况下使用纯multiprocessing
,所以我可以在其他机器上轻松使用我的脚本。提前谢谢!
编辑: 真正的问题是: 我正在寻找有效的流程间沟通方式。如果一个进程从许多进程接收到msgs,它需要无限循环遍历每个连接以检查是否有msg挂起。有没有办法让进程从任何子进程等待/冻结msg?