2012-01-17 11 views
0

私はApache prefork MPMで動作する単純なwsgiアプリケーションを持っています。私はmodwsgi docs on processes and threads(本当に良い読み込み)を読んでいます。私はまだいくつかのことと同期が必要なものについて混乱しています。WSGIプロセス/スレッドフラグと同期の混乱

/1私のApacheの設定はこのように私のWSGIアプリへの単純なWSGIScriptAliasの場合:

WSGIScriptAlias /alias_name /path/to/wsgi/app.wsgi 

とのprefork MPM Apacheの構築と仮定すると、その後、WSGIスレッドとプロセスフラグは次のようにでてきます[ wsgi.multiprocess = True、wsgi.multithread = False)。私はこれが単一のプロセス(スレッドなし)が各要求を処理していることを意味します。これらの用語では、プロセス間でIPCを実行していないため、各プロセスに独自のアドレス空間があるため、何も同期する必要はありません。それは正しい考えですか?

/2私のApacheの設定は、しかしWSGIDaemonPrcoessesを使用した場合:

WSGIScriptAlias /alias_name /path/to/wsgi/app.wsgi 

WSGIDaemonProcess wsgi_proc_names processes=2 threads=2 

WSGIProcessGroup wsgi_proc_names 

を、その後WSGIフラグが[wsgi.multiprocess =真、wsgi.multithread =真]として来ている可能性がありますスレッドはお互いのつま先を踏み越えるかもしれません。ここで、特定のデータへのアクセスを同期させる必要があるかもしれません。私のアプリケーションにI/Oがない場合は、他に同期が必要ですか?たとえば、クラス変数は編集時にロックする必要がありますか?複数のスレッドから呼び出されている関数をロックして解放する必要がありますか?これは私が最も混乱していることです。

おかげ アンジェロ

答えて

0

アンジェロ、 は限り#1が行くようにあなたの思考は、固体のように見えます。

あなたの2番目の質問(#2)はややトリッキーです。しかし、私が知っている限り、I/Oをロックする必要があります(あなたのケースでは何もしません)。私はあなたが関数をロックする必要があるとは思わないので、各スレッドはそれ自身の呼び出しスタックを持っている必要があります。ロックを必要とする唯一のものはグローバル変数です。しかし、あなたはそれらを使っているとは言いませんでした。

+0

返信いただきありがとうございました。私はmaztazを見ているすべての例がありますか? – angeloHarpy

+0

私は手元にいませんが、終わりまでに何かを得ることができるかもしれません – maztaz