我看到很多关于如何使用多处理的例子,但他们都谈论产生工人并在主要流程存活时控制它们。我的问题是如何以下列方式控制后台工作人员:
从命令行启动5个worker:
之后,我将能够从命令行按需列出和停止工作人员:
重要的一点是manager.py应该在每次运行后退出。我不明白的是如何从新创建的manager.py程序中获取已经运行的工作者列表并与之通信。
编辑:Bilkokuya建议我将(1)一个管理工作人员列表的管理员流程......并且还将监听传入的命令。 (2)一个小命令行工具,它将向第一个管理器进程发送消息......实际上它听起来像是一个很好的解决方案。但问题仍然是 - 我如何在新创建的命令行程序(进程2)上与另一个进程通信?我看到的所有例子(例如Queue)只有在两个进程一直在运行时才有效
答案 0 :(得分:0)
我可以建议的最便携的解决方案(尽管这仍然需要进一步研究),是一个长期运行的流程来管理“后台工作者”流程。这不应该被杀掉,因为它处理将消息传递给每个子进程的逻辑。
然后,Manager.py可以实现逻辑来创建与该长时间运行的进程的通信(无论是通过管道,套接字,HTTP还是您喜欢的任何其他方法)。所以manager.py实际上只是将消息传递给“服务器”进程“嘿,请停止所有子进程”或“请向进程10发送消息”等。这涉及到很多工作,还有很多需要研究的工作。但是你要查看的主要内容是如何处理IPC(进程间通信)。这将允许Manager.py脚本与现有/长时间运行的进程交互,从而更好地管理每个后台工作程序。
另一种方法是完全依赖操作系统的流程管理API。但我从经验中建议,这是一个更容易出错和麻烦的解决方案。