Python中的进程间通信

在两个不同的python进程之间进行进程间通信的干净而优雅的方法是什么?我目前在操作系统中使用命名管道,但感觉有点hacky。我用dbus服务重写了我的东西,但是看起来当通过SSH会话远程运行代码时,它现在尝试初始化X11,这对于我想做的事情来说似乎完全没有必要(它们与GUI无关)。所以也许dbus有点太重量了。我正准备再次使用套接字进行重新设计,但它看起来很低级,所以我认为可能有一个更高级别的模块我可以导入和使用,我根本就不知道它的名字,我想我应该问SO第一..

我的要求是能够运行python foo.py并让这个过程就像守护进程那样做,并且能够向它发送消息python foo.py --bar。后一个调用应该只是向现有进程发送一个消息并终止,可能带有0成功的返回代码或其他失败的代码(因此需要进行一些双向通信)。


HUWWW
浏览 630回答 3
3回答

牛魔王的故事

该multiprocessing库提供了包装套接字的侦听器和客户端,允许您传递任意python对象。您的服务器可以侦听接收python对象:from multiprocessing.connection import Listeneraddress = ('localhost', 6000)     # family is deduced to be 'AF_INET'listener = Listener(address, authkey='secret password')conn = listener.accept()print 'connection accepted from', listener.last_acceptedwhile True:    msg = conn.recv()    # do something with msg    if msg == 'close':        conn.close()        breaklistener.close()您的客户端可以发送命令作为对象:from multiprocessing.connection import Clientaddress = ('localhost', 6000)conn = Client(address, authkey='secret password')conn.send('close')# can also send arbitrary objects:# conn.send(['a', 2.5, None, int, sum])conn.close()

jeck猫

我会用套接字; 本地通信得到了极大的优化,因此您不应该遇到性能问题,并且如果需要,您可以将应用程序分发到不同的物理节点。关于“低级”方法,你是对的。但您可以根据需要始终使用更高级别的包装器。XMLRPC可能是一个很好的候选者,但对于你正在尝试执行的任务来说可能有些过分。Twisted提供了一些很好的协议简单实现,例如LineReceiver(用于简单的基于行的消息)或更优雅的AMP(顺便说一句,标准化和以不同语言实现)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python