我有一个创建多个子进程的进程,它需要在Python 2.5中进行通信。我使用子进程模块启动进程,将stdin和stdout设置为subprocess.PIPE。到目前为止一切都很好。
在一个循环中,我然后在每个子进程的stdout流上运行select.select(),等待它们告诉我它们已经准备好了。然后我写信给他们的stdin给他们工作并重复这个过程。
目前,我只是使用stdin.write和stdout.readline来进行通信。但是,我希望能够在进程之间传递复杂的消息。简单的换行终止消息是不够的(除非我采取步骤以某种方式逃避消息中的新行)。我想我可以用字节长度为所有消息添加前缀,以便我的消息看起来像:
6:foobar
但这让我想到了这样的问题:这样的事情是否已经存在?我真的不想在这里重新发明轮子。我想要一个图书馆,告诉我什么时候有完整的信息准备好并交给我。还有很多其他协议以各种方式执行此类操作(TCP,消息队列服务器,HTTP等),但它们对我的用例来说都是过度杀伤。在Python中的进程之间进行消息传递的正确方法是什么?
答案 0 :(得分:1)
您可以使用json
或pickle
对包含该消息的数据结构进行编码,然后在另一侧使用相同内容来阅读该消息。
答案 1 :(得分:1)
有一些框架可以帮助您解决这类功能。如果您想发送更复杂的消息而不必担心同步问题。一些非常好的框架的例子是:
这些框架主要在TCP / IP之上工作。对你的东西略有不同的方法。但是,也许你应该考虑的事情。