Python:有没有办法安排Celery任务只在特定的时间范围内运行?

时间:2015-08-06 11:17:56

标签: python python-2.7 celery celerybeat

我有一个使用Celery的应用程序,我希望它只允许工作人员在一天中的某些时间之间运行任务。

例如:

  • 我希望我的任务只能在每天凌晨2点到4点之间执行
  • 如果在该时间范围内没有从队列中完成所有任务,那么它们将被转移到第二天,以便在2:00到4:00之间运行。
  • 我可以随时向队列添加更多任务

我一直在关注Celery's Periodic Tasks,但这似乎只能设置执行任务的时间而不设置停止时间:

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    # Executes every Monday morning at 7:30 A.M
    'add-every-monday-morning': {
        'task': 'tasks.add',
        'schedule': crontab(hour=7, minute=30, day_of_week=1),
        'args': (16, 16),
    },
}

可能没有办法用Celery开箱即用,但我只是想在开始构建可以自动化的东西之前进行检查。

提前干杯!

2 个答案:

答案 0 :(得分:0)

我认为你可以用芹菜中原生的东西做的最好的事情是将你的任务的expires选项设置为2小时。

CELERYBEAT_SCHEDULE = {
    # Executes every Monday morning at 7:30 A.M
    'add-every-monday-morning': {
        'task': 'tasks.add',
        'schedule': crontab(hour=14),
        'expires': 60 * 60 * 2,  # 2 hours
    ...

您需要自己实现的其他功能。

答案 1 :(得分:0)

您可以动态addcancel consumers for queues。只需设置一个cronjob,在凌晨2点添加消费者,在凌晨4点将其删除。您也可以使用计划的芹菜任务,但是您必须设置第二个队列以确保它被执行。

只需确保您的队列能够保存同时排队的所有任务。