特定の時間に django celery crontab を 30 秒間実行することは可能ですか?
分、時間、日の設定しかありません。
crontab は動作していますが、毎分ではなく 30 秒ごとに実行したいと考えています。
あるいは...
インターバルを30秒間オンにして、1日の特定の時間だけインターバルスケジュールをオンにすることはできますか?
特定の時間に django celery crontab を 30 秒間実行することは可能ですか?
分、時間、日の設定しかありません。
crontab は動作していますが、毎分ではなく 30 秒ごとに実行したいと考えています。
あるいは...
インターバルを30秒間オンにして、1日の特定の時間だけインターバルスケジュールをオンにすることはできますか?
例:tasks.addタスクを30秒ごとに実行します。
from datetime import timedelta CELERYBEAT_SCHEDULE = { "runs-every-30-seconds": { "task": "tasks.add", "schedule": timedelta(seconds=30), "args": (16, 16) }, }
本当にこれを行う必要があり、すぐに解決策が必要な場合は、スクリプトに sleep を追加することに頼ることができます。(明らかに、スクリプトにパラメーターを追加してスリープ時間を 0 または 30 秒に設定し、スクリプトを crontab に 2 回追加する必要があります。1 回目はパラメーターとして 0 を使用し、2 回目は 30 を使用します)。
これについて私に反対票を投じないでください!これは理想的な解決策ではないことを明確にしていますが、これは解決策です。
別のタスクをスケジュールしてプライマリタスクを有効/無効にすることで、代替ソリューションを使用します。
# tasks.py
from djcelery.models import PeriodicTask
@app.task
def toggle_thirty_second_task:
# you would use whatever you named your task below
thirty_second_tasks = PeriodicTask.objects.filter(name='runs-every-30-seconds')
if thirty_second_tasks:
# this returned an array, so we'll want to look at the first object
thirty_second_task = thirty_second_tasks[0]
# toggle the enabled value
thirty_second_task.enabled = not thirty_second_task.enabled
thirty_second_task.save()
次に、切り替えが必要な時間に crontab を使用してこのタスクをスケジュールします。または、オンにするタスクとオフにするタスクをスケジュールし、切り替えロジックを処理しないようにすることもできます。
お役に立てれば。
sc