2011-05-25 141 views
4

我们有两个运行在两台Linux服务器上的Python程序。现在我们想在这些Python程序之间发送消息。到目前为止最好的想法是创建一个TCP/IP服务器和客户端架构,但这似乎是一个非常复杂的方法。这是做这种事最好的做法吗?两个Python程序之间的进程间消息传递

+0

这些程序需要发送什么样的消息?这些服务器的角色是什么:服务器是以同级方式运行还是存在主/从设置类型?你需要达到什么样的延迟?你也需要确保所有的信息到达,或者如果可能有些数据丢失的话,它是否可以? – jsalonen 2011-05-25 07:58:26

+0

其主从设置。我需要做的是,主设备在创建表后向所有从设备发送消息在从主设备接收到消息后,从设备将从主设备的表中选择行并执行一些操作。现在奴隶们会发信息给主人,告诉他们已经完成了。所以在这里基本上我只需要例如像“done = True”这样的消息发送给对方。 – 2011-05-25 08:35:08

+0

因此实际上这里涉及2个或更多的服务器?你还有一些特定的数据库吗?如果是这样,那么你为什么要用Python与服务器进行通信? – jsalonen 2011-05-25 08:41:24

回答

3

这实际上取决于您想要的消息类型以及这两个进程的角色。如果它是适当的“客户端/服务器”,我可能会创建一个SimpleHTTPServer,然后使用HTTP在两者之间进行通信。您还可以使用XMLRPCLib和客户端在它们之间进行通信。用你自己的定制协议手动创建一个TCP服务器听起来对我来说不是个好主意。您也可以考虑使用消息队列系统在它们之间进行通信。

0

你可以有一个mulitprocessing.managers。正如文档所述:“管理对象控制管理共享对象的服务器进程,其他进程可以使用代理访问共享对象。”

就你而言,你可以创建一个控制其他进程的主进程,每个进程都会调用主进程来获取数据。

6

我喜欢zeromq用于简单消息传递,它非常轻巧,快速......非常灵活。使用AMQP消息传递不是一个坏主意,要么取决于你的具体情况,我发现kombu是一个非常好的pythonic库。您也可以使用xmlrpclib或使用bottleflask设置简单的REST API。每个选项都有它的位置,所以我会调查所有选项。

+0

你会碰巧知道ZeroMQ是否适用于Python 3?我检查了它的Python API,代码是Python 2。 – fouric 2012-04-08 01:30:27