在Python中调用另一个进程的方法

时间:2013-02-05 22:00:05

标签: python multiprocessing tornado

我的设置如下 - 我有一个基于Tornado的HTTP服务器,它几乎就是“hello world”的例子:

server = tornado.httpserver.HTTPServer(app)
server.bind(8888)
server.start(2)
tornado.ioloop.IOLoop.instance().start()

现在在这个设置中,我还有另一个由进程生成的进程(让我们称之为控制进程)。因此,这个控制过程是两个Tornado处理程序进程的兄弟。当然,我可以通过根进程创建的管道在处理程序进程和控制进程之间进行通信。但是,我更感兴趣的是调用控制过程的方法并获得它的输出。

做这种事的最佳方法是什么?如果我使用管道从处理程序向控件发送请求并返回结果,我应该使用锁来实现进程安全吗?

2 个答案:

答案 0 :(得分:0)

您不需要使用管道锁。管道是它自己的同步。或者,换一种方式,管道的两侧是分开的物体。

(当然控制进程可能需要内部锁定,例如,如果它从主事件循环不同的线程处理管道,并且需要与在主循环中运行的代码共享任何数据,但这不相关进程间安全。)

无论如何,如果您退一步从更高层次考虑这个问题,那么您实现的是RPC机制的确切定义。如果您正在做的事情很简单,那么从头开始实现它很好,但如果没有,您可能希望将另一个协议添加到control并让Tornado将其与您现有的协议一起管理

答案 1 :(得分:0)

您可能会发现RPyC module

很有用