2017-05-17 11 views
0

私は昼食から30分後にトリガーされる仕事をスケジュールしようとしているフラスコのフレームワークに取り組んでいます。 Python Flaskでタイムイベントをスケジュールするにはどうすればよいですか?

は私が threading.Timerで動作するようにしようとした、しかし、私の仕事は私が 例外RuntimeErrorを取得していREST要求を呼び出しているので:私はちょうど解決することができませんでしたの要求のコンテキストの外で働きます "。このスレッドから

は、私はそれはフラスコサーバー上threadingモジュールを使用して、推奨されていないことを理解: How do you schedule timed events in Flask?

だから私は上で動作しない(時限トリガジョブのためのソリューションを探しています間隔)。

APschedulerは間隔に基づいている必要があります。

私は何か助けに感謝します。

+1

'セロリ 'を使ってみてください。 – stamaimer

+0

ちょっと、 タイマーなしで新しいスレッドを生成すると、同じRunTimeErrorにつながるので、私の問題は多分異なると思います。 新しいスレッドが作成されると、アプリケーションコンテキストまたはリクエストコンテキストが取得されないようです。 私は、新しいスレッドにパラメータとしてアプリコンテキストを渡すことができました。 しかし依然として要求コンテキストはなく、要求に到達しようとすると例外がスローされます。 リクエストを生成することは可能ですか、それともそれを渡す必要がありますか? ありがとう:) – Lito26

+0

http://flask.pocoo.org/docs/0.12/patterns/celery/ – stamaimer

答えて

1

アペスケジューラadd_jobメソッドは、dateトリガを使用して、必要な処理を実行できます。

プロのヒントは:

あなたはフラスコアプリプロセス内apschedulerを使用している場合は、gunicornまたはuwsgiあなたの仕事にまで手になるようなWSGIサーバで生産に入ったときには、それぞれに複数の時間(いずれかを実行していますフラスコワーカー)。

この問題に直面したとき、gunicorn --preloadオプションは私のためにそれをカットしませんでした。

ので:

  • それがあなたに合っている場合は、彼の残りのサーバアプローチでフラスコ-apschedulerを使用することができます。
  • かは、デーモンと
    • 使用uwsgi mules
    • をapschedulerを分離または唯一のWebアプリケーションを実行しているgunicorn続けると スケジューラ・デーモンを開始するためにスーパーバイザーを使用しています。
    • または少し汚れているがシンプルであるという利点があるソケット付きのthisソリューションを使用してください。スーパーバイザの二部及び使用にgunicorn /フラスコapschedulerの分離がきれいまだそれほど複雑ではない解決策である私見

関連する問題