問題タブ [celerybeat]
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.
python - Python スクリプト (ボット) のスケジュールされたジョブを起動する最良の方法
時間間隔/期間が異なる一連の定期的なアクションを実行する Twitter ボットを構築しようとしています。そこで、頻度の異なるスケジュールされたタスクのグループを処理するための優れたソリューションを考え出そうとしました。
たとえば、次のタスクを実行する必要があります。
- 15 分ごとにタスク 1 を実行します。
- 1 時間ごとにタスク 2 を実行します。
- タスク 3 を毎日行う。
- 週に一度、タスク 4 を実行します。
cron ジョブを使用することを検討しましたが、15 分ごとに 1 つの cron ジョブを使用して、実行する必要があるタスクを確認するか、タスクごとに cron エントリを分離するかのいずれかで、面倒です。
もっと良いものが欲しかったので、Celery を使用して定期的なタスクをスケジュールできることを読みましたが、ワーカーとメッセージング キューに頭を悩ませています。
他の選択肢はありますか?
プログラムの保守と拡張を容易にするために、どちらが優れていると思いますか?
以前に cron を使用したことがありますが、非常に単純なタスク用です。このような場合に cron を正しくセットアップする方法に関するリソースはありますか。
mongodb - セロリ ビート デーモンのクラスターを調整するにはどうすればよいですか?
3 台のマシンのクラスターがあります。それらの上で走りたいcelery beat
。関連する質問がいくつかあります。
- Celery には、永続的なスケジューラという概念があります。スケジュールが crontab エントリのみで構成され、 によって静的に定義されている限り、スケジュール
CELERYBEAT_SCHEDULE
を永続化する必要はありますか? - その場合、このストレージがクラスターのすべてのマシン間で同期されていることを確認する必要がありますか?
djcelery.schedulers.DatabaseScheduler
並行ビートデーモンを自動的に処理しますか? つまり、3 つの Beat デーモンを で実行するだけでDatabaseScheduler
、タスクが重複することはありませんか?DatabaseScheduler
Django ORMなしで、MongoDBに基づいたようなものはありますか? Celery 独自の MongoDB ブローカーと結果のバックエンドのように。
python - メソッドタスクが機能しないセロリビート
メソッドタスクでcelerybeatを実行しようとしていますが、正しく機能するものが何もありません。設定例は次のとおりです。
私のceleryconfig.pyファイルは
実行するcelery beat
と、次のようなエラーが発生します。
メソッドを通常の関数に変換して`@celery.task'で装飾すると、機能するので、残りのセットアップは機能しているように見えます。メソッドタスクに関するドキュメントに警告がありますが、問題がどこにあるかを実際に分類することはできません。誰かがこれを解決する方法を知っていますか?
python - セロリで平日を意識した仕事をスケジュールする方法
セロリビートで洗練されたスケジュールを設定することは可能ですか?たとえば、次のようなものです。
月曜日から金曜日に、パラメーター(x1、y1)を使用してジョブAを実行し、次にジョブBを実行します。土曜日、日曜日に、パラメーター(x2、y2)を使用してジョブAを実行し、ジョブBを実行しません。
このスケジュールをチェックする高頻度の「ティック」タスクを実装できることは知っていますが、このための何かがすでに存在する場合は、車輪の再発明をしたくありません。
django - Djangoセロリが起動時にpytzエラーを打ち負かす
セロリとセロリビートで開発サーバーを起動しようとすると、突然次のエラーが発生します。ある日、これは機能しますが、次の日は機能しません。これを説明できるものは何も変更していません。次のように、フォアマンとProcfile.devを使用してサーバーを起動します。
Procfile:
指示:
私が言ったように、これは決してエラーを与えませんでした。スタックトレースは以下のとおりです。
インストールしたパッケージのバージョン:
pytzを再インストールしようとしましたが、役に立ちませんでした。
これを修正する方法の提案はありますか?
編集1
Burhan Khalidの答えを試しましたが、これでIOErrorが修正されましたが、新しいエラーがスローされます。私はzoneinfoデータを貼り付けるために2つの場所を試しましたが、それらは異なるエラーを引き起こしました。これは以下で見つけることができます。
提案されたようにusr/share / zoneinfo /に貼り付けると、次のようになります。
〜/ .virtualenvs / env_name / lib / python2.7 / site-packages / pytz / zoneinfoに貼り付けた場合:
したがって、提供されたzoneinfoデータが正しくない/不完全であるようです。正しいデータはどこで入手できますか?
編集2:
Burhan Khalidの答えを答えとしてマークしましたが、私にとってはうまくいきませんでした。私がこれをしたのは、私が何か間違ったことをしたと確信していて、答えが正しいからです。この問題を修正する方法は、zoneinfoデータを別のMacBookからこのMacBookにコピーして貼り付けることです。
django - Django Celery Beat - DatabaseScheduler を使用して引数を渡す方法
Django Celery Beat で「DatabaseScheduler」を使用していますが、関数に引数を渡すことができません。
設定:
タスク:
Django管理者を使用して引数「日」を渡すにはどうすればよいですか? 「some_task」を呼び出す新しい「定期タスク」を作成しました。私は引数日を渡そうとしました:
また、テストされました:
Django admin を使用して引数を渡す方法について、誰かが私に手がかりを与えることができますか?
よろしくお願いします、
django - Django Celerybeat PeriodicTask が予想よりもはるかに多く実行されています
Django、Celery、djcelery、および PeriodicTasks に苦労しています。
Adsense のレポートを取得してライブ統計レポートを生成するタスクを作成しました。これが私の仕事です:
セロリとRabbitMQを使用しています。ここに私の設定があります:
一見するとすべてが機能しているように見えますが、ロガーをオンにして実行を観察したところ、タスクが少なくとも 4 回連続して実行されていることがわかりました。また、2 分ごとではなく、1 分ごとに実行されているようです。crontab を使用するように run_every を変更しようとしましたが、同じ結果が得られます。
スーパーバイザーを使用してセロリビートを開始しています。これが私が使用するコマンドです:
なぜ期待どおりに機能しないのかについてのアイデアはありますか?
ああ、もう1つ、日が変わった後も、最初に実行した日付範囲を引き続き使用します。そのため、日が進むにつれて、タスクの実行が開始された日の統計が取得され続けます。ある時点でタスクを手動で実行しない限り、最後に手動で実行した日付に変更されます。なぜこれが起こるのか誰か教えてもらえますか?
mysql - ジャンゴとセロリはスケジューラーにデータベースエントリを打ち負かしません
私の問題は、ビート スケジューラがテーブル 'tasks' と 'workers' にエントリを保存しないことです。私はジャンゴとセロリを使用しています。私のデータベース(MySQL)では、間隔が120秒の定期的なtast「Estimate Region」を追加しました。
これは私が私の労働者を始める方法です:
ワーカーを起動した後、ターミナルでワーカーが動作し、スケジューラがデータベースから定期的なタスクを選択して操作することを確認できます。
私のタスクがどのように定義されているか:
端末はこれを示しています:
タスク「領域の推定」によって results.csv ファイルが返されるので、ワーカーとビート スケジューラが機能していることがわかります。しかし、その後、django管理パネルの「タスク」または「ワーカー」にデータベースエントリがありません。
これがsettings.pyの私のセロリ設定です
` CELERY_DISABLE_RATE_LIMITS = True CELERY_TASK_SERIALIZER = 'pickle' CELERY_RESULT_SERIALIZER = 'pickle' CELERY_IMPORTS = ('fv.tasks') CELERY_RESULT_PERSISTENT = True
誰かが私を助けてくれることを願っています:)