我正在使用Tornado Web框架,但我的部署环境之一是prefork Apache 2上的mod_wsgi(奇怪的托管要求)。
processes=n threads=1
是WSGIDaemonProcess
设置tornado.wsgi.WSGIAdapter
的正确方法吗?我自己的代码应该是线程安全的,但是,我将SQLAlchemy Session()绑定到处理程序的tornado.web.RequestHandler
中.prepare()
的实例here(我显然没有在WSGI中使用协同程序 - 模式)。我也在一些请求处理程序中使用阻塞tornado.httpclient.HTTPClient
。
此外,WSGIDaemonProcess
处理fork()与tornado.httpserver.HTTPServer().start(n)
相比吗?
(我在这里发布这个问题,因为我不知道如何同时询问@Ben Darnell和@Graham Dumpleton而不发送龙卷风和mod_wsgi列表的垃圾邮件)。
答案 0 :(得分:1)
WSGIAdapter
是线程安全的,Tornado的子集也是如此(RequestHandler.write
,例如,与{{WSGIAdapter
一起使用时是线程安全的1}},但不适用于IOLoop
)。因此,当使用WSGIAdapter
运行时,您可以像对待任何其他WSGI框架一样配置WSGI服务器(通常类似于每个CPU核心1个进程(这与您使用HTTPServer.start(n)
的内容相当) )每个进程有5-10个线程,具体取决于你在I / O上花费的时间。)
请注意tornado.httpclient.HTTPClient
个对象不是线程安全的,因此您需要对其进行锁定或对每个线程使用单独的对象。