2017-09-21 40 views
2

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

它看起来对我来说,多处理模块应该做我想做的,但所有的例子我能找到之一:

  • 涉及过程 - 一个用于`multiprocessing.managers.BaseManager”衍生对象和两个客户端。
  • 参与启动另一个进程的其中一个进程。

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

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

当然,我在这里失去了一些东西。是不是有一些简单的方法可以将服务器位添加到一个进程中,因此它接受字典作为消息,将客户端接收到另一个进程,以便它可以将字典发送到服务器?

+0

这些进程位于同一主机上。 – Tom

+1

任何将字典从一个过程转移到另一个过程的方法都将“涉及序列化”。 – jasonharper

+0

@jasonharper:当然会的。感谢您说出完全明显的盲点。我想避免的是重新发明轮子,以便*我*必须选择某种连续化的方式。 – Tom

回答

3

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

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

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

+0

谢谢!正是我在找什么。 – Tom

相关问题