是否可以使用multiprocessing.Queue在两个python脚本之间进行通信?

时间:2018-12-05 14:10:37

标签: python concurrency multiprocessing interprocess

我刚刚了解了python并发及其库模块多处理。我遇到的大多数示例都在一个python脚本中,它产生了多个进程,并使用multiprocessing.Queue在它们之间进行通信。

我的问题是:在不使用消息代理或第三个监管应用程序的情况下,两个python脚本可以使用multiprocessing.Queue相互通信吗?

1 个答案:

答案 0 :(得分:0)

multiprocessing模块是一个支持 spawning 进程的程序包,因此您可以编写并行执行的代码。这意味着您可以编写一个透明地生成多个进程的python脚本,而不必担心这些进程如何序列化数据并将其传递给彼此。

关于您的问题,这取决于...为什么它们需要分开?

  • 如果唯一担心的是您的函数是在不同的模块/脚本中定义的,则只需导入使用Queue的脚本中所需的所有内容,并在一个脚本中使所有功能可用。

  • 如果您的用例是希望一个脚本等待请求(服务器)而另一个脚本成为客户端(它在需要时将请求发送到服务器并等待响应),那么您需要实现某种RPC协议。

您可以使用诸如Flask之类的Web框架来创建http服务器,并从客户端向其发送http请求,或者,如果您只需要共享简短的简短消息,则可以使用sockets来实现自己的消息交换协议。

因此可以总结一下:2个python进程可以在没有消息代理的情况下进行通信(例如,通过套接字)。但是,如果要运行1个python脚本,该脚本会生成可以相互通信的多个进程,则需要使用multiprocessing。相反,如果您需要启动2个独立的脚本并让其中一个请求另一个脚本来执行一些工作并返回输出,则需要在它们之间实现一些RPC协议。 multiprocessing.Queue对象本身不能替代消息代理。如果希望独立启动的独立脚本通过消息队列进行通信,则该队列需要驻留在正在通信的进程之一(即服务器)中,或者驻留在第三个进程中。