在Python中调用其他进程的方法
我的设置是这样的 - 我有一个基于Tornado的HTTP服务器,基本上就是一个“你好,世界”的例子:
server = tornado.httpserver.HTTPServer(app)
server.bind(8888)
server.start(2)
tornado.ioloop.IOLoop.instance().start()
在这个设置中,我还有另一个进程(我们称之为控制进程),它是由根进程启动的。因此,这个控制进程和两个Tornado处理进程是兄弟关系。自然,我可以通过根进程创建的管道在处理进程和控制进程之间进行通信。不过,我更感兴趣的是如何调用控制进程的一个方法,并获取它的输出。
那么,做这件事的最佳方法是什么呢?如果我使用管道从处理进程发送请求到控制进程并返回结果,我是否应该使用锁来确保进程安全?
1 个回答
1
使用管道的时候,你不需要加锁。管道本身就能保证同步。换句话说,管道的两端是独立的对象。
当然,控制进程内部可能需要加锁,比如说如果它是从一个不同的线程处理管道,并且需要和主事件循环中的代码共享数据,但这和进程间的安全性没有关系。
总之,如果你从更高的角度来看这个问题,你实现的其实就是RPC机制的定义。如果你做的事情比较简单,从头开始这样实现是可以的,但如果事情复杂,你可能需要给control
添加另一个协议,让Tornado来管理它和你现有的协议。