2011-07-18 4 views
1

私たちは、mysql接続のためのORMとしてapache/mod_wsgiとsqlalchemyを持つSoaplib-Soap Serverを使用しています。異なるユーザー間でセッションのようにdb接続を共有するにはどうすればいいですか?

global dictを使用して、sqlalchemy-makesession接続で処理されるdbセッションを格納しようとしました。

しかし、我々はmod_wsgiをを使用して、本番環境への私たちのコードを移動するとき、それは動作しません、それはそれぞれの要求

のためのさまざまなプロセスを作成するように、現在、我々はWSGIDaemonProcess example processes=1 threads=1を設定しているが、それは良い解決策ではありません。

グローバル・データベース接続プールを使用してすべてのリクエストでdbセッションを共有する理想的なソリューションは何ですか?

答えて

0

要求ごとに新しいプロセスが作成されません。あなたがしていたことは、あなたがApache prefork MPMを使って組み込みモードで実行していたことです。 Apacheは要求を処理する多くのプロセスを作成し、要求はおそらく異なるプロセスによって順番に処理されます。最終的に要求は戻ってきて、以前に使用されたプロセスによって処理され、キャッシュされた接続にヒットします。

一般に、埋め込みモードとプリフォークMPMを使用することは悪い考えです。デーモンモードを使用し、スレッドセーフなコードを作成し、マルチスレッドプロセスを使用します。コードスレッドを安全にする方法を理解できない場合は、少数のシングルスレッドデーモンモードプロセスを使用してください。すなわち、それは組み込みモードのように数がはるかに大きくなるためにとApacheも殺すとプロセスを再起動することができます成長することができ、一定数であるため、

WSGIDaemonProcess example processes=4 threads=1 
WSGIProcessGroup example 

これはまだApacheのpreforkのMPMと組み込みモードよりも優れています。デーモンモードでは、プロセスは常にその設定で永続的になります。

+0

URLを確認してください。http://soaplib.github.com/soaplib/2_0/pages/usermanager.html私たちのプロジェクトでこの例を続けました。スレッドセーフですか?現在のところ 'process = 4 threads = 1'も機能していません... – shahjapan

+0

この時点で、あなたは本当に元の質問を展開して"うまくいかない "ということを意味し、今は十分ではありません。また、mod_wsgiが何をしているかについての詳細な情報を提供し、組み込みモードをまだ使用していないことを確認するので、Apacheの 'LogLevel info'をオンにすることをお勧めします。 –

+0

は動作しません。変数をグローバルに共有できません。各プロセスにはグローバル変数のコピーがあります。 apachyの埋め込みモードは何ですか、どのように使用できますか、特定のヘルプ/ URLが私を助けてくれるかもしれません。ありがとう! – shahjapan

関連する問題