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

标签 python concurrency multiprocessing interprocess

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

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

最佳答案

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

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

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

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

您可以使用 Flask 等 Web 框架创建一个 http 服务器,并从客户端向其发送 http 请求,或者如果您只需要共享简短的消息,您可以使用 sockets 实现您自己的消息交换协议(protocol).

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

关于python - 是否可以使用 multiprocessing.Queue 在两个 python 脚本之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53634231/

相关文章:

java - 调整并发 HashMap 的大小

Python 多处理 Process() 在 Windows 10 上不起作用(即使是腌制简单字符串)

python - 列表过滤索引

java - Java和Python中基于经纬度的唯一编号生成

c# - 将集合添加到 BlockingCollection

python - 为什么在使用 joblib.Parallel 时保护主循环很重要?

c - sem_wait 无法继续

python - 如何为嵌套列表中的每一行运行一个函数?

python - 类返回语句不打印任何输出

java - 无法停止使用 ExecutorService 启动的任务