我正在使用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列表的垃圾邮件)。
WSGIAdapter
是线程安全的,Tornado的子集与它一起使用(例如,RequestHandler.write
在与WSGIAdapter
一起使用时是线程安全的,但在与IOLoop
一起使用时则不是。)因此,当使用WSGIAdapter
运行时,您可以像对待任何其他WSGI框架一样配置WSGI服务器(通常类似于每个CPU核心1个进程(这与HTTPServer.start(n)
相比)和每个进程5-10个线程取决于您在I / O中花费的时间)。
请注意,tornado.httpclient.HTTPClient
对象不是线程安全的,因此您需要在其周围放置一个锁或者为每个线程使用单独的对象。