2011-10-28 15 views
0

私のWebベースのアプリでは、私はCherrypy 3.2をHTTPフレームワークとして使用することに決めました。CherryPy、SQLAlchemyコアスレッドの安全性?

私はcherrypy.Applicationクラスを使用して、Apache2経由でmod_wsgiで提供されるWSGI互換appliactionオブジェクトを作成しています。

また、私はSQLalchemy 0.7.3(ORMではない)のコアコンポーネントだけを使用しています。リクエストごとに正確なセッションバインディングを行うためにcherrypyにいくつかのツールが用意されています(SAToolsなど)。しかし、SQLalchemyのSessionオブジェクトは、コアではなくORMの一部です。

私は同様のツールを作成する方法についてはセッションがなくても考え始めました。

SQLAlchemyののドキュメントは言う:Pythonのマルチプロセッシングモジュールos.forkシステムコールを使用して、複数のプロセス・アプリケーション、 または例えば

、それは通常、別のエンジンを使用する必要が です子プロセスごとに

チェリーピーススレッドごとに1つのエンジンを正しく作成するにはどうすればよいですか?スレッドはapache2(おそらく)によって作成されることに注意してください。

ありがとうございました!

編集:それは多分重要であり、そのWSGIアプリケーションがmod_wsgiの下でのapache2

答えて

0

によってデーモンモードで実行されて、私は質問を理解している場合、アプリケーションがプリインストールされていないので、私は、これは問題だとは思いませんmod_wsgiのforkの前にメモリに書き込む。代わりに、アプリケーションは個別のプロセスに別々にロードされるため、フォーク全体の継承のために共有されたものから問題は発生しません。

+0

これは本当ですか?私はそれをテストしていたので、アプリケーションオブジェクトは実際にスレッド間で共有されていると思います。 – JoshuaBoshi

+0

質問を編集し、wsgiアプリケーションがデーモンモードで使用されているという情報を追加しました(この場合はおそらく重要です) – JoshuaBoshi

+0

スレッドとはプロセスが異なります。私は引用されたテキストに焦点を当てました。これはos.forkについて語ります。これは、スレッドではなくプロセスに関することを意味します。私はあなたがあなたが引用されたセクションに基づいて必要とすることがわかりませんスレッドごとに1つnedと信じて混乱していたとそれを取った。 –