4

スポーン後にできるだけ早く各ワーカーで実行する関数を登録する方法はありますか (uWSGI または Flask で) 。

たくさんのものをプリロードすることで恩恵を受けるフラスコアプリがあります。preload以下は、8 つのワーカー プロセスに対して 1 回だけ呼び出します。最初のリクエストは高速ですが、プリロードされたオブジェクトは何らかの方法で共有され、エラーが発生します。

app = Flask(__name__)
preload()

before_first_requestを使用すると、オブジェクトは各ワーカー プロセスに読み込まれ、エラーは発生しませんが、最初のリクエストは非常に遅くなります。

app = Flask(__name__)

@app.before_first_request
def bfr():
    preload()

フラスコスクリプトも設定してみました。コマンドの実行は機能しますが、明らかに、オブジェクトは uwsgi ワーカーではなくコマンドのプロセスで読み込まれます。

app = Flask(__name__)
manager = Manager(app)

@manager.command
def preload():
    ...

を使用するbefore_first_requestと、uwsgi の再起動後に手動でリクエストをトリガーできると思います。それがここでの唯一の解決策ですか?

編集: uswgi hook-post-forkオプション (およびその他のフック オプション) が見つかりました。明日それを試してみます。多分それらの1つは私が必要とするものです。

4

1 に答える 1