【问题标题】:Python 2-process IPCPython 2 进程 IPC
【发布时间】:2017-09-21 18:19:44
【问题描述】:

我有两个独立存在的进程。现在我想在“尽力而为”的基础上将消息从一个传递到另一个 - 如果接收消息的进程不存在,那没关系,但如果是,那么它应该收到信息。该消息是一个 python 字典。

在我看来,多处理模块应该做我想做的事,但我能找到的所有示例:

  • 涉及 三个 进程 - 一个用于 `multiprocessing.managers.BaseManager' 派生对象和两个客户端。
  • 涉及其中一个进程启动另一个进程。

我可以采用三进程方法,但是当我知道只有两个其他进程并且我只想将对象从一个传递到另一个时,这似乎很愚蠢。我并不特别想完全重新构建整个系统,以便一个进程启动另一个进程。

我也可以只使用套接字,但这将涉及以某种方式序列化字典并处理序列化字典太大而无法一次性缓冲的情况等等。我可以启动一个 HTTP 服务器并接受一个 json 序列化的字典,但这越来越傻了。

我肯定在这里遗漏了一些东西。难道没有一些简单的方法可以将服务器位添加到一个进程,以便它接受字典作为消息,并将客户端位添加到另一个进程,因此它可以将字典发送到服务器?

【问题讨论】:

  • 进程在同一台主机上。
  • 将字典从一个进程转移到另一个进程的任何可能的方法都将“涉及序列化”。
  • @jasonharper:当然会。感谢您说出完全令人眼花缭乱的事实。我要避免的是重新发明轮子,以便 必须选择某种方式来序列化它。

标签: python python-3.x python-multiprocessing


【解决方案1】:

您可以查看多处理 Listeners and Clients 类。 AF_UNIXAF_PIPE 系列是使用命名管道实现的,命名管道比套接字更轻量级。

它们返回的Connection 对象将通过sendrecv 方法为您序列化字典,因此您无需担心。

您只需要确保字典内容可以是pickled

【讨论】:

  • 谢谢!正是我想要的。
猜你喜欢
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
相关资源
最近更新 更多