序文: これらの問題を小さな問題に分けたいと思いますが、どうやら、パズルのいくつかのピースが欠けているようで、私には不可能に思えます。
私は、cherrypy の組み込み WSGI サーバーを使用して、cherrypy アプリケーションを開発しました。私は、その時が来れば、作成した WSGI Application クラスを使用して、WSGI 準拠のサーバーを使用してデプロイできるようになるだろうと単純に想定していました。
このブログ投稿を使用して、http 要求中に SQLAlchemy を使用してデータベースに接続するための独自の (ただし非常によく似た) cherrypy プラグインとツールを作成しました。
どのサーバーもcherrypyのビルトインサーバーのように機能することを期待していました:
- メイン プロセスは、X 個のスレッドを生成して、X 個の同時要求を満たす
- 私のエンジン プラグインは、接続プール = X で SQLalchemy エンジンを作成します (したがって、すべてのリクエストにその接続があります)。
- リクエストが到着すると、私のツールはプールからSQL錬金術接続を提供します
このフローはuWSGIと一致しません(私が理解している限り)。
私application.py
はuWSGI構成で自分を割り当てます。このファイルは次のようになります。
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 はそれを理解し、これらのスレッドを同時要求に使用しますか? そして、これはどのように行うことができますか?私はcherrypyが何とか使えると思いますか?cherrypy.engine
また、SQLAlchemy プラグインについてはどうですか? WSGI のみを使用する場合、どのように開始できcherrypy.Application
ますか?
私を助けることができる助けや情報をいただければ幸いです。
編集:
私の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>