我刚刚了解了Python并发及其库模块多处理。我遇到的大多数示例都在一个 python 脚本中,它会生成多个进程,并使用 multiprocessing.Queue 在它们之间进行通信。
我的问题是:在不使用消息代理或第三个监督应用程序的情况下,两个 python 脚本可以使用 multiprocessing.Queue 相互通信吗?
multiprocessing
模块是一个支持spawning进程的包,以便您可以编写并行执行的代码。这意味着您可以编写一个 Python 脚本来透明地生成多个进程,而不必太担心这些进程如何序列化数据并将其传递给彼此。
至于你的问题,这取决于......为什么它们需要分开?
如果唯一担心的是您的函数是在不同的模块/脚本中定义的,您可以在使用
Queue
的脚本中导入所需的所有内容,并使所有函数在一个脚本中可用。 如果您的用例是您希望一个脚本等待请求(服务器)而另一个脚本作为客户端(它在需要时向服务器发送请求并等待响应),那么您需要实现某种排序RPC 协议。
您可以使用 Flask 等 Web 框架创建一个 http 服务器,并从客户端向其发送 http 请求,或者如果您只需要共享简短的简单消息,您可以使用 sockets 实现自己的消息交换协议。
总结一下:2 个 python 进程可以在没有消息代理的情况下进行通信(例如:通过套接字)。但是,如果您想运行 1 个 python 脚本来生成多个可以相互通信的进程,则需要使用
multiprocessing
。相反,如果您需要启动 2 个独立的脚本,并让其中一个脚本请求另一个脚本执行某些工作并返回输出,则您需要在它们之间实现一些 RPC 协议。 multiprocessing.Queue
对象本身并不能替代消息代理。如果您希望独立启动的独立脚本通过消息队列进行通信,则该队列需要位于正在通信的进程之一(即服务器)中,或者位于第三个进程中。
是的,只要两个脚本运行在同一台机器(即相同的操作系统)上就可以。请参阅官方多处理文档中的“使用远程管理器”。
如果您的脚本在不同的机器上运行,