我使用Tornado作为Web服务器。我用Python编写了一些守护进程,它们运行在服务器硬件中。有时,Web服务器需要将一些数据发送到守护程序并接收一些计算结果。有两个工作: 1.异步模式:服务器向守护进程发送一些数据,不需要很快得到结果。我可以使用消息队列完美地完成它吗? 2.同步模式:服务器将数据发送到守护进程,它将等待直到获得结果。我应该使用套接字吗?
那么龙卷风和基于Python的守护进程之间最好的通信方式是什么?
答案 0 :(得分:1)
ZeroMQ可用于此目的。它有各种不同用途的插座,速度快,永远不会成为你的瓶颈。对于异步,您可以使用DEALER / ROUTER套接字,对于严格的同步模式,您可以使用REQ / REP套接字。
你可以使用python绑定 - > http://www.zeromq.org/bindings:python。
对于异步模式,您可以尝试zguide chapter 3 Router-to-dealer async routing:
中的类似内容在您的情况下,"客户"在图中将是您的Web服务器,您的守护程序将是" worker"。
对于同步,您可以尝试simple request-reply broker或某些变体以满足您的需要。
上图显示了REQ / REP插座上发送/接收的严格同步周期。阅读zguide链接以了解其工作原理。他们还在页面上有一个python代码片段。
答案 1 :(得分:0)
取决于规模 - 简单的事情就是在Tornado中使用HTTP和AsyncHTTPClient。对于我们的应用程序中的请求< - >响应案例,我们使用这种方法将获得300个连接/秒。
对于第一种情况Fire and forget,您也可以使用AsyncHTTP,让服务器关闭连接并继续工作......