問題タブ [apscheduler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
33328 参照

python - Python Flask フレームワークで繰り返しタスクを実行するには?

訪問者に情報を提供する Web サイトを構築しています。この情報は、5 秒ごとにいくつかの外部 API をポーリングすることによって、バックグラウンドで集計されます。私が今それを機能させている方法は、APSchedulerジョブを使用することです。システム全体の移植がより簡単になるため、最初は APScheduler を好みました (新しいマシンで cron ジョブを設定する必要がないため)。次のようにポーリング機能を開始します。

これはちょっとうまくいきますが、いくつかの問題があります:

  1. 手始めに、これは間隔ジョブが Flask コンテキストの外で実行されていることを意味します。これまでのところ、これは大きな問題ではありませんでしたが、エンドポイントの呼び出しが失敗したときに、システムからメールが送信されるようにしたいと考えています (「API X の呼び出しに失敗しました」というメッセージ)。ただし、Flask コンテキスト内で実行されないため、flask-mailを実行できないと訴えます ( RuntimeError('working outside of application context'))。
  2. 第 2 に、Flask 組み込みデバッグ サーバーを使用しなくなったときに、これがどのように動作するのか疑問に思いますが、4 つのワーカーを使用する運用サーバーとしましょう。それでは、すべてのジョブを 4 回開始しますか?

全体として、これらの定期的なタスクを実行するためのより良い方法があるはずだと感じていますが、その方法はわかりません。誰かがこの問題に対する興味深い解決策を持っていますか? すべてのヒントは大歓迎です!

[編集] Celeryとそのスケジュールについて読んでいます。Celery が APScheduler とどのように違うのか、それによって私の 2 つのポイントを解決できるのかどうかはよくわかりませんが、これを読んで、Celery についてもっと調査する必要があると思う人がいるのだろうか?

[結論] 約 2 年後、私はこれを読んでいて、最終的にどうなったかを皆さんにお知らせできると思いました。@BluePeppers が Flask エコシステムにそれほど密接に結び付けられるべきではないと言ったのは正しいと思いました。そこで、Ansible を使用して設定された、毎分実行される通常の cron ジョブを選択しました。これにより少し複雑になりますが (Ansible を学習し、毎分実行するだけで十分になるようにコードを変換する必要がありました)、これはより堅牢だと思います。私は現在、a-sync ジョブ (API のチェックと電子メールの送信) をキューに入れるために素晴らしいpythonr-rqを使用しています。rq-schedulerについて知りました。まだテストしていませんが、そもそも私が必要としていたことを正確に実行しているようです。したがって、これはこの質問の将来の読者へのヒントになるかもしれません。

残りは、皆さんの素晴らしい一日をお祈りします!

0 投票する
2 に答える
4175 参照

python - Pythonスクリプトを実行し続ける最良の方法は?

APScheduler を使用して、次のようにいくつかの繰り返しタスクを実行しています。

このスクリプトが終了すると interval_job が終了するため、単純に終了while Trueループを追加しました。これが最善かどうかはわかりませんが、これを行うためのpythonicの方法は言うまでもありません。これを行う「より良い」方法はありますか?すべてのヒントは大歓迎です!

0 投票する
1 に答える
681 参照

mongodb - mongodb のカスタム データベースでの APScheduler ストア ジョブ

Pythonを使用してmongodbにジョブを保存したいのですが、特定の時間にスケジュールする必要があります。

グーグルで調べたところ、APScheduler で十分であることがわかりました。コードをダウンロードして、コードを実行しようとしました。

ジョブを正しくスケジュールして実行しますが、ジョブをmongodbのapschedulerデータベースに保存します。ジョブを自分のデータベースに保存したいです。

デフォルトのデータベースではなく、自分のデータベースにジョブを保存する方法を教えてください。

0 投票する
1 に答える
3605 参照

python - apscheduler 間隔タスクが実行されていません

メインタスクを毎日午前 6 時に実行したいと考えています。しかし、テスト目的で、間隔を 5 秒に設定しました。問題は、発火しないように見えることです。maintask メソッドに到達することのないブレーク ポイントがあり、コンソールに何も出力されません。走っていないとします。

ETA: 私のコードは、ブロックしているため停止する scheduler.start() に到達します。メインタスクを 5 秒で開始する必要がありますが、開始されません。

Python のバージョンは 2.7、apscheduler のバージョンは 3.0 です。

WindowsとDebianで同じ結果を実行しました。

これが私のコードです。

0 投票する
1 に答える
1733 参照

post - フォームの入力フィールドとして Python 辞書を投稿する

ユーザーが設定した間隔で実行するように Python スクリプトを設定できるようにするアプリケーションを作成しています。APSCheduler を SQLAlchemy と組み合わせてデータ ソースとして使用し、Flask を Web UI に使用しています。

ジョブを設定するための次のマークアップを含む画面があります。

このフォームの「送信」ボタンは、以下のスクリプトをトリガーして、レコードをデータベースに追加します

APScheduler にはいくつかの重要なフィールドがあります。

  • 関数: スケジュールする関数の詳細 (例: JOBS.TestJob:Test は、JOBS フォルダーの Testjob.py ファイルでテスト関数を実行します)。
  • args: 関数に提供する関数のリスト。
  • kwargs: 関数に提供する関数の辞書。

残念ながら、args と kwargs が空白の場合、入力画面は正常に機能しますが、引数を入力しようとするとエラーが発生します。たとえば、Test 関数が引数 "Abbrev" を想定していて、{"Abbrev":"Test1"} を kwargs フィールドに入力するとします。

誰かが私を正しい方向に向けることができますか? データを送信するためにバニラ HTTP POST リクエスト (JSON?) 以外のものを使用する必要がある場合、これが私の python のエラーであるかどうかはわかりません。

0 投票する
1 に答える
1670 参照

python - 詳細情報を含む APScheduler 警告をログに記録する方法は?

Python APSchedulerを使用して一連の繰り返しタスクを実行していますが、いくつかのタスクで次のようなエラーが発生します。

WARNING:apscheduler.scheduler:Execution of job "getAndStoreExchangeRate (trigger: cron[minute='*'], next run at: 2014-11-06 18:48:00 CET)" skipped: 実行中のインスタンスの最大数に達しました (1 )

それに加えて、この APscheduler インスタンスのメモリ使用量は、約 10 日間の実行で約 47MiB から 1200MiB に急激に増加し、その後、マシンがメモリ不足であらゆるプロセスが停止します。

したがって、問題の根本にたどり着くには、これらの警告の原因となっている呼び出しを正確に理解する必要があります。私の知る限り、このエラーは、前の呼び出し (この呼び出しの 1 分前) がまだ終了していないために発生します。ただし、このエラーの情報はかなりあいまいです。関数の名前は ( getAndStoreExchangeRate) で示されていますが、このような名前の関数を含む複数のファイルがあります。だから私が知りたいのは:

  • 警告が発生するこの関数は、どのファイルのどの行にありますか?
  • この関数に与えられた引数は?

この情報をどこかに記録する方法を知っている人はいますか? すべてのヒントは大歓迎です!

[編集]

そこで、BackgroundScheduler をサブクラス化し_process_jobs()、このスニペットで self._logger.warning を変更したメソッドを上書きしました。

これに:

これは、関数に与えられた引数を表示するという点で機能しますが、最も重要なことはまだわかりません。警告が発生するこの関数がどのファイルのどの行に定義されているかです。誰か私がそれを示す方法を知っていますか?