1

私はDjangoアプリでCeleryを使用していますが、ほとんどの場合、物事は順調に進んでいます。参考までに、私のセロリビート構成は次のとおりです。

CELERYBEAT_SCHEDULE = {
    'update-every-5-secs': {
        'task': 'app1.tasks.task1',
        'schedule': timedelta(seconds=5),
        'args': (),
    },
    'archive-request-records-every-hour': {
        'task': 'app0.tasks.archive_requests',
        'schedule': crontab(minute=0, hour='*/1'),
        'args': (),
    },
    'push-ios-background-every-5-minutes': {
        'task': 'app0.tasks.push_ios_background',
        'schedule': crontab(minute='*/5'),
        'args': (),
    },
}

1 ~ 2 日ごとにランダムに完全に同期しなくなることに気付きました。たとえば、5 分ごとに実行される最後のエントリは、通常、1:00、1:05、1:10、1:15 などのように実行されます。

これが今朝の動作です: 7:30, 7:35, 7:40, 7:46 , 7:50, 8:03, 8:16, 8:32, 8:50, 9:13, 9: 21, 9:26, 9:29, 9:32, 9:38, 9:47, 9:59, 10:08, 10:22, 10:24, 10:24, 10:24, 10:24, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:26, 10: 26、10 :30、10:35、10:40...

同期が外れて、一度にすべてを埋めようとして、それから自分自身を取り戻しているように見えます。最初はただのまぐれだと思っていましたが、あまりにも頻繁に発生しています。これには、時間通りに実行する必要があるミッション クリティカルなプロセスがあります。

これを防ぐ方法はありますか?人々がセロリで多くの成功を収めているように見えるので、私は本当に困惑しています.

4

1 に答える 1

2

設定はよさそうです。

タスクの開始時ではなく、タスクの完了時を測定している可能性はありますか? タスクに非常に時間がかかるか、失敗する可能性があるため、レポートされない可能性があります。

crontab私の経験では低レベルでかなり正確なので、最初にロギングツールを確認します。

アップデート

もう 1 つのデバッグ ソリューションは、タスクの時間制限の実装を開始して、タスクが長時間ロックされないようにすることです。http://docs.celeryproject.org/en/latest/userguide/workers.html#time-limits

CELERYD_TASK_TIME_LIMIT = 300
CELERYD_TASK_SOFT_TIME_LIMIT = 260
于 2014-07-27T17:46:46.927 に答える