2017-05-11 9 views
1

私はFlaskアプリケーションをインタプリタから直接起動しています。gunicornを使用してFlaskアプリケーションを起動するとき、バックグラウンドスレッドを開始するにはどうすればよいですか?

if __name__ == '__main__': 
    t = Thread(target=run_schedule) 
    t.start() 
    context = ('cert.pem', 'key.pem') 
    app.run(host='0.0.0.0',port=8080,debug=False,ssl_context=context) 

run_schedule機能は、タスクを実行するためにたまにブロック解除、永遠にループします。

明らかに、私はもうデバッグしていないときに、gunicornのようなwsgiサーバーを使用するはずですが、モジュールをmain()経由で呼び出していないため、スレッドは起動しません。

他のコードがモジュールをインポートした場合にスレッドが開始されるため、ブロックの外側に置くことはできません!

@before_first_request私が必要とするものですが、最初にリクエストしてサーバーを突き刺す必要があります。理想的ではない。

お勧めの方法は何ですか? (または、バックグラウンドスレッドはwsgiの哲学に反していますか?)

+1

サーバーアプリケーションにバックグラウンドスレッドを生成しないでください。たとえば、WSGIサーバー[いくつかのサーバーアプリケーションを生成する可能性があります](http://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#adding-concurrencyandmonitoring)には、いくつかのバックグラウンドスレッドがあります。代わりに[cronjobs](https://en.wikipedia.org/wiki/Cron)や[Celeryのようなジョブキュー](http://www.celeryproject.org/)を参照してください。 –

+1

Gotcha、ありがとう。私はそれを受け入れることができるように答えに移動したいですか? –

+1

完了、ありがとう –

答えて

関連する問題