3

为什么?因为我有一个 django 项目,它从用户那里捕获数据并使用许多网络服务向用户显示结果以比较信息,例如通过航空公司网络服务搜索机票并实时显示结果以比较机票的聚合网站.

现在我在“等待页面”中执行此操作,其中 celery 访问 web 服务,而 jquery 每 5 秒询问一次是否所有结果都准备好了,所以当准备好时重定向到结果页面。

我想要做的不是使用这个“等待页面”,我想在结果即将到来时实时提供结果页面,我想让它遵循最佳实践,我的意思是我不想 jquery get每 X 秒将结果提供给表格。

我认为一些基于协程的 python 库可以帮助我解决这个问题,但我想先了解更多关于你的经验并查看一些示例,我很困惑,因为项目的这一部分被设计为异步运行,我的意思是,使用 web 服务celery-chords,但不是为通过应用服务器实时调度信息而设计的。

实际架构:python 2.7、django 1.3、postgresql 9、celery 3 + redis、uwsgi、nginx,都托管在 aws 上。

先感谢您。

4

2 回答 2

2

uWSGI+gevent 是一个可靠的组合,虽然目前无法使用 tornado api 运行 uWSGI(并且由于 uWSGI 在 1.9 中放弃了对基于回调的方法的支持,我认为我们永远不会看到该组合起作用)。

在开始使用 gevent 之前你需要解决的问题是确保你的所有部分都是 gevent 友好的(redis 和 celery 都可以,你需要检查你的数据库适配器)。之后只需将 --gevent 添加到您的 uWSGI 实例,其中是每个工作人员的最大并发请求数。

于 2013-03-05T14:11:58.513 回答
0

我不知道 uWSGI+gevent,但是你可以在 uWSGI 中使用 tornado。Tornado 基本上在tornado.wsgi.WSGIContainer模块中为您提供了内置的 WSGI 支持,以使其与其他 WSGI 服务器(如 uWSGI 和 gunicorn)可压缩。但这取决于您的使用情况,我认为将异步框架与同步框架一起使用并不是一个好主意服务器(如 uWSGI)。Tornado 对此有此警告。

WSGI 是一个同步接口,而 Tornado 的并发模型是基于单线程异步执行的。这意味着使用 Tornado 的 WSGIContainer 运行 WSGI 应用程序的可扩展性低于在多线程 WSGI 服务器(如 gunicorn 或 uwsgi)中运行相同的应用程序。仅当在同一进程中组合 Tornado 和 WSGI 的好处大于降低的可伸缩性时,才使用 WSGIContainer。

于 2017-07-22T10:43:44.853 回答