前言:我想將這些問題分成更小的問題,但顯然,我錯過了一些難題,對我來說似乎是不可能的。uWSGI,cherrypy和線程
我使用內置WSGI服務器的cherrypy開發了我的cherrypy應用程序。我天真地認爲,到時候,我將能夠使用創建的WSGI Application類並使用任何符合WSGI的服務器進行部署。
我使用this blog post來創建我自己的(但非常相似)cherrypy插件和工具,以便在http請求期間使用SQLAlchemy連接到數據庫。
我期望的任何服務器會以某種方式如內置在服務器CherryPy的工作:
- 主要過程將產生X線,以滿足X併發請求
- 我的引擎插件將創建SQLAlchemy的發動機,連接池= X (所以任何請求都將有它的連接)請求到達
- ,我的工具將提供從池
這種流動不SQL鍊金術連接與uWSGI相匹配(只要我明白了)。
我在uWSGI配置中指定我的application.py
。這個文件看起來是這樣的:
cherrypy.tools.db = DbConnectorTool()
cherrypy.engine.dbengine = DbEnginePlugin(cherrypy.engine, settings.database)
cherrypy.config.update({
'engine.dbengine.on': True
})
from myapp.application import Application
root = Application(settings)
application = cherrypy.Application(root, script_name='', config=settings)
我用這個application.py
安裝在服務器我的申請,內置CherryPy的,當我開發和測試它。
問題是uWSGI本身並沒有創建任何線程,我的SQLAlchemy插件也沒有使用它,因爲沒有創建cherrypy.engine
。
uWSGI是否支持使用線程爲多個併發請求提供服務的線程化?我可以在我的application.py
中啓動這些線程嗎? uWSGI會理解它並將這些線程用於併發請求嗎?這怎麼能做到呢?我認爲櫻桃可以以某種方式使用,或不是? 那我的SQLAlchemy插件怎麼樣,我怎麼才能在僅使用WSGI cherrypy.Application
時啓動cherrypy.engine
?
任何幫助或信息,可以幫助我將不勝感激。
編輯:
我uWSGI配置:
<uwsgi>
<socket>127.0.0.1:9001</socket>
<master/>
<daemonize>/var/log/uwsgi/app.log</daemonize>
<logdate/>
<threads/>
<pidfile>/home/web/uwsgi.pid</pidfile>
<uid>uwsgi</uid>
<gid>uwsgi</gid>
<workers>2</workers>
<harakiri>90</harakiri>
<harakiri-verbose/>
<home>/home/web/</home>
<pythonpath>/home/web/instance</pythonpath>
<module>core.application</module>
<no-orphans/>
<touch-reload>/home/web/uwsgi-reload-web</touch-reload>
</uwsgi>
你好,謝謝你的回答。我編輯了問題並添加了我的uWSGI配置。 – JoshuaBoshi