查看一个名为RabbitMQ的跨平台库/服务器。对于双进程通信可能太重,但如果您需要多进程或多代码库通信(使用各种不同的方式,例如一对多,队列等),这是一个不错的选择。
要求:
$ pip install pika $ pip install bson # for sending binary content $ sudo apt-get rabbitmq-server # ubuntu, see rabbitmq installation instructions for other platforms
发布者(发送数据):
import pika, time, bson, os connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.exchange_declare(exchange='logs', type='fanout') i = 0 while True: data = {'msg': 'Hello %s' % i, b'data': os.urandom(2), 'some': bytes(bytearray(b'\x00\x0F\x98\x24'))} channel.basic_publish(exchange='logs', routing_key='', body=bson.dumps(data)) print("Sent", data) i = i + 1 time.sleep(1) connection.close()
订阅者(接收数据,可以是多个):
import pika, bson connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.exchange_declare(exchange='logs', type='fanout') result = channel.queue_declare(exclusive=True) queue_name = result.method.queue channel.queue_bind(exchange='logs', queue=queue_name) def callback(ch, method, properties, body): data = bson.loads(body) print("Received", data) channel.basic_consume(callback, queue=queue_name, no_ack=True) channel.start_consuming()
基于的例子 https://www.rabbitmq.com/tutorials/tutorial-two-python.html
我会使用套接字,但使用Twisted为您提供一些抽象,并使事情变得简单。 他们的简单回声客户端/服务器示例 是一个很好的起点。
您只需要组合文件并实例化并运行客户端或服务器,具体取决于传递的参数。
我会用套接字;本地通信得到了极大的优化,因此您不应该遇到性能问题,并且如果需要,您可以将应用程序分发到不同的物理节点。
关于“低级”方法,你是对的。但您可以根据需要始终使用更高级别的包装器。 XMLRPC 可能是一个很好的候选人,但对于你正在尝试执行的任务来说,这可能是过度的。
扭曲 提供了一些很好的协议简单实现,例如 LineReceiver (对于简单的基于行的消息)或更优雅的AMP(顺便说一下, 标准化并以不同语言实施 )。
根据我的经验, rpyc 是迄今为止最简单,最优雅的方式。
rpyc
(我知道这是一个老问题,但我偶然发现它......)