mod_wsgiのマルチプロセッシング機能と、マルチプロセッシング機能を備えたWSGIサーバーで実行されるWSGIアプリケーションの一般的な設計について少し混乱しています。
次のディレクティブを検討してください。
WSGIDaemonProcess example processes=5 threads=1
私が正しく理解していれば、mod_wsgiは5つのPython(CPythonなど)プロセスを生成し、これらのプロセスのいずれもユーザーからのリクエストを受け取ることができます。
ドキュメントには次のように書かれています。
共有データをすべてのアプリケーションインスタンスに表示する必要がある場合、それらが実行する子プロセスに関係なく、あるアプリケーションによってデータに加えられた変更は、別の子プロセスでの実行を含め、別のアプリケーションですぐに利用できます。データベースまたは共有メモリを使用する必要があります。通常のPythonモジュールのグローバル変数は、この目的には使用できません。
ただし、その場合、アプリが任意のWSGI条件(マルチプロセッシング条件を含む)で実行されることを確認したい場合は、非常に重くなります。
たとえば、接続されているユーザーの現在の数を含む単純な変数-memcachedから/へのプロセスセーフな読み取り/書き込み、DB、または(そのような標準外のライブラリメカニズムが利用可能な場合)共有メモリー?
そして、コードは次のようになります
counter = 0
@app.route('/login')
def login():
...
counter += 1
...
@app.route('/logout')
def logout():
...
counter -= 1
...
@app.route('/show_users_count')
def show_users_count():
return counter
マルチプロセッシング環境で予期しない動作をしますか?
ありがとうございました!