如何在运行django后端的Tornado webserver中添加gen.Task模块以允许多个异步请求

时间:2017-04-14 00:45:49

标签: python django asynchronous tornado

我第一次尝试使用nssm在服务模式下(未登录)在microsoft webserver上部署django网站。

为此,似乎我不能使用通常的

python manage.py runserver 0.0.0.0

所以我试图在我的项目中添加一个新的tornado.py文件,nssm会指向它:

from tornado.wsgi import WSGIContainer
from tornado.ioloop import IOLoop
from tornado.web import FallbackHandler, RequestHandler, Application, StaticFileHandler

from wsgi import application
from mySite.settings import *


class MainHandler(RequestHandler):
    def get(self):
        self.write("Hi Tornado")

tr = WSGIContainer(application)
app = Application([
    (r"/tornado", MainHandler), 
    (r"/static/(.*)", StaticFileHandler, {'path': STATIC_ROOT}), 
    (r"/media/(.*)", StaticFileHandler, {'path': MEDIA_ROOT}),     
    (r".*", FallbackHandler, dict(tr)),     
])


if __name__ == '__main__':
    app.listen(8000)
    IOLoop.instance().start()

指向此文件的nssm使部署正常,但不幸的是,我有一些长请求在后端django中调用其他API,当我调用其中一个长服务时,不可能发出其他请求,即我必须等待第一个请求完成。

根据我在本网站上与同一问题相关的其他问题,我需要在下面添加龙卷风装饰器:

@gen

我尝试了几个选项但没有成功,找不到使用django的示例。

我只将django用于mvc框架,但没有使用orm或auth。

我必须保留django,因为它有很多工作和microsoft webserver / nssm,因为它是我公司的最佳实践,但龙卷风能够帮助我吗?我正朝着正确的方向前进吗?

提前感谢那些花时间帮我解决这个问题的人。

1 个答案:

答案 0 :(得分:0)

注意WSGIContainer docs上的警告:龙卷风的WSGIContainer没有并行性,几乎可以肯定是比gunicornuwsgi等其他WSGI服务器更糟糕的选择用于基于WSGI的应用程序。

@gen.coroutine适用于原生Tornado应用程序;对于在WSGIContainer内运行的外部应用程序,它没有任何有用的方式。

龙卷风的Windows支持也很有限。