2

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

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

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

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

4

1 回答 1

1

您不需要带管道的锁。管道是它自己的同步。或者,换一种说法,管道的两侧是独立的对象。

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

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

于 2013-02-05T22:04:32.350 回答