为什么?因为我有一个 django 项目,它从用户那里捕获数据并使用许多 web 服务向用户显示结果以便比较信息,就像聚合网站通过航空公司 web 服务搜索机票并实时显示结果以便比较机票.
现在我在“等待页面”中执行此操作,其中 celery 访问 Web 服务,而 jquery 每 5 秒询问一次所有结果是否已准备就绪,因此当准备就绪时重定向到结果页面。
我想做的是不使用这个“等待页面”,我想在结果到来时实时提供结果页面,我想让它遵循最佳实践,我的意思是我不想jquery 每 X 秒获取一次结果以提供表格。
我认为一些基于协程的 python 库可以帮助我解决这个问题,但我想先了解更多关于您的经验并查看一些示例,我很困惑,因为项目的这一部分被设计为异步运行,我的意思是,使用 celery-chords 使用网络服务,但并非设计用于通过应用服务器实时发送信息。
实际架构: python 2.7、django 1.3、postgresql 9、celery 3 + redis、uwsgi、nginx,全部托管在 aws 上。
提前致谢。
最佳答案
uWSGI+gevent 是一个可靠的组合,虽然目前没有办法用 tornado api 运行 uWSGI(并且由于 uWSGI 在 1.9 中放弃了对基于回调的方法的支持,我认为我们永远不会看到该组合起作用)。
在开始使用 gevent 之前,您需要解决的问题是确保您的所有部分都是 gevent 友好的(redis 和 celery 都可以,您需要检查您的数据库适配器)。之后只需将 --gevent 添加到您的 uWSGI 实例,其中是每个工作人员的最大并发请求数。
关于python - 我可以同时使用 uwsgi + (tornado, gevent, etc) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225320/