我可以同时使用uwsgi +(龙卷风,gevent等)吗?

时间:2013-03-05 13:43:48

标签: python django tornado uwsgi

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

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

我想要做的就是不要使用这个“等待页面”,我想在结果出现时实时提供结果页面,我想让它遵循最佳实践,我的意思是我不想要到jquery每隔X秒获取一次结果来提供表格。

我认为一些基于协程的python库可以帮助我解决这个问题,但我想先了解一下你的经验,看看一些例子,我很困惑,因为项目的这一部分是为了异步运行而设计的,我的意思是,使用celery-chords消费webservices,但不是为通过app服务器实时发送信息而设计的。

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

提前谢谢。

2 个答案:

答案 0 :(得分:2)

uWSGI + gevent是一个坚实的组合,虽然目前没有办法用tornado api运行uWSGI(并且因为uWSGI在1.9中放弃了基于回调的方法的支持,我认为我们永远不会看到组合工作)。

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

答案 1 :(得分:0)

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

  

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