2012-08-12 68 views
2

我发布了一个问题:How to execute a command at exact time once a day in Django?如何在Django应用程序中使用芹菜执行任务?

我有我的回答是,芹菜是做最简单的选择,但现在我有一个关于芹菜另一个问题:

from celery.schedules import crontab 

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

我有关于三个问上面的代码即:

  • 我必须执行execute_command(User, command)方法。我希望此方法将在给定的预定时间执行。

  • 如果我想在7:30 AM but every weekdays更改计划,该怎么办?

  • 那么args呢。在我的情况下,我应该从args通过User and command的值。或者我可以简单地通过task键?

我刚刚读了芹菜的文档,但没有得到我的答案。你能帮我吗?

回答

4

您是否找到Celery periodic tasks documentation

  • 您必须使用方法的标识符来注册调度程序条目。如果您的execute_command任务位于名为foobar的模块中,则CELERYBEAT_SCHEDULE结构的task值应为foobar.execute_command

    芹菜会为您导入任务,只要import foobar.execute_command可以工作。

  • 检查celery.schedule.crontab API;以下应在上午07:30平日执行:

    crontab(minute=30, hour=7, day_of_week=’mon-fri’) 
    
  • 请记住,这个任务将被异步执行。您在计划此任务时无法查询数据库对象,并且在任务被调用时仍希望它仍在那里。

    因此,你应该只通过在保持不变蟒蛇值,并有你的任务连接到数据库,并根据您在传递参数看东西。

    如果这个任务是永远只能去执行一个特定用户的任务,然后通过所有方式传递该用户的标识符(用户标识,电子邮件,无论您可以用来从数据库中查找用户)。