0

Zope で動的なグラフとチャートを生成して提供するために使用するライブラリで、ちょっとしたスレッド化の問題があります。元の問題の説明については、この質問を参照してください。

ウェブサイトはすでに運用されているため、そのライブラリをデバッグする時間がありません (私は C とスレッドの専門家ではありません)。そのため、簡単な修正を探しています。私が思いついた最良のアイデアは、mod_wsgi を何らかのガードとして使用することです。

WSGIScriptAlias /graphs /path/to/my/app.wsgi
WSGIDaemonProcess mysite user=www-data group=www-data processes=1 threads=1

wsgi アプリは、Zope によって再度処理さ/path/to/my/app.wsgiれるすべての要求を単純にリダイレクトします。/_graphswsgi アプリを 1 つのスレッドで 1 つのプロセスに制限しているため、スレッド化の問題を防ぐことができます。ウェブサイトは大量ではありません。これがパフォーマンスに影響するかどうかはあまり気にしません. また、/_graphsURL が直接アクセスから保護されていなくてもかまいません。元の問題は、チャートが同時にダウンロードされた場合にのみ発生します。これは、ユーザーがいくつかの動的チャートが埋め込まれたページを表示した場合にのみ発生します。

とはいえ、この「解決策」(うまくいくとしても)は、私の頭の中の小さなコンピューター科学者を赤子のように泣かせます。より良いアイデアはありますか?

4

1 に答える 1

2

リダイレクトする必要はありません。行う:

WSGIDaemonProcess multithreaded processes=1 threads=15
WSGIDaemonProcess singlethreaded processes=3 threads=1

WSGIScriptAlias / /path/to/my/app.wsgi

WSGIProcessGroup multithreaded

<Location /graphs>
WSGIProcessGroup singlethreaded
</Location>

つまり、アプリケーションを複数のデーモン プロセス グループに分散させ、Location ディレクティブを使用して、単一のスレッド プロセス グループで処理される特定の URL を委譲します。

いずれにせよ、WSGIDaemonProcess のデフォルトは 1 つのプロセスであるため、通常は 'processes=1' を使用しないことに注意してください。この場合、'processes' オプションを使用すると 'wsgi.multiprocess' が True に設定されるため、これが必要です。その特定のデーモン プロセス グループには 1 つのプロセスしかありませんが、マルチプロセス構成の一部です。

于 2009-12-08T20:10:25.357 に答える