1

我使用 Tornado 作为 Web 服务器。我用 Python 编写了一些守护进程,它们在服务器硬件中运行。有时,Web 服务器需要向守护进程发送一些数据并接收一些计算结果。有两种工作方式: 1. 异步模式:服务器向守护进程发送一些数据,很快就不需要结果。我可以使用消息队列完美地做到这一点吗?2. 同步模式:服务器向守护进程发送数据,等待得到结果。我应该使用套接字吗?

那么,tornado 和基于 Python 的守护进程之间的最佳通信方式是什么?

4

2 回答 2

1

ZeroMQ可用于此目的。它具有用于不同目的的各种套接字,并且速度足够快,永远不会成为您的瓶颈。对于异步,您可以使用 DEALER/ROUTER 套接字,对于严格同步模式,您可以使用 REQ/REP 套接字。

您可以为此使用 python 绑定 --> http://www.zeromq.org/bindings:python

对于异步模式,您可以从zguide 第 3 章路由器到经销商异步路由中尝试类似的操作:

在您的情况下,图中的“客户端”将是您的 Web 服务器,而您的守护进程将是“工作者”。

zguide 路由器经销商异步路由


对于同步,您可以尝试一个简单的请求-回复代理或一些变体来满足您的需要。

一个简单的请求-回复-代理

上图显示了在 REQ/REP 套接字上发送/接收的严格同步循环。通读 zguide 链接以了解其工作原理。他们在页面上还有一个 python 代码片段。

于 2012-05-19T16:49:09.040 回答
0

根据规模 - 简单的事情就是在 Tornado 中使用 HTTP 和 AsyncHTTPClient。对于我们应用程序中的请求<->响应情况,我们将使用这种方法达到 300 个连接/秒。

对于第一种情况 Fire and forget,您也可以使用 AsyncHTTP 并让服务器关闭连接并继续工作......

于 2012-05-19T18:13:30.740 回答