10

特定の時間に django celery crontab を 30 秒間実行することは可能ですか?

分、時間、日の設定しかありません。

crontab は動作していますが、毎分ではなく 30 秒ごとに実行したいと考えています。

あるいは...

インターバルを30秒間オンにして、1日の特定の時間だけインターバルスケジュールをオンにすることはできますか?

4

4 に答える 4

14

彼らがドキュメントに持っている非常に最初の例は...

例:tasks.addタスクを30秒ごとに実行します。

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    "runs-every-30-seconds": {
        "task": "tasks.add",
        "schedule": timedelta(seconds=30),
        "args": (16, 16)
    },
}
于 2012-05-15T08:41:01.143 に答える
4

本当にこれを行う必要があり、すぐに解決策が必要な場合は、スクリプトに sleep を追加することに頼ることができます。(明らかに、スクリプトにパラメーターを追加してスリープ時間を 0 または 30 秒に設定し、スクリプトを crontab に 2 回追加する必要があります。1 回目はパラメーターとして 0 を使用し、2 回目は 30 を使用します)。

これについて私に反対票を投じないでください!これは理想的な解決策ではないことを明確にしていますが、これは解決策です。

于 2012-05-15T08:32:04.850 に答える
2

別のタスクをスケジュールしてプライマリタスクを有効/無効にすることで、代替ソリューションを使用します。

# 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

于 2014-08-05T15:41:19.863 に答える