如何在 Django 应用程序中使用 celery 执行任务?
Posted
技术标签:
【中文标题】如何在 Django 应用程序中使用 celery 执行任务?【英文标题】:How to execute a task using celery in Django application? 【发布时间】:2012-08-09 03:17:09 【问题描述】:我发了一个问题:How to execute a command at exact time once a day in 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
键传递?
我刚刚阅读了 celery 的文档,但没有得到我的答案。你能帮帮我吗?
【问题讨论】:
【参考方案1】:你找到Celery periodic tasks documentation了吗?
您必须使用方法的标识符来注册调度程序条目。如果您的execute_command
任务位于名为foobar
的模块中,则CELERYBEAT_SCHEDULE
结构的task
值应为foobar.execute_command
。
Celery 将为您导入任务,前提是 import foobar.execute_command
可以工作。
检查celery.schedule.crontab
API;以下应在工作日上午 07:30 执行:
crontab(minute=30, hour=7, day_of_week=’mon-fri’)
请记住,此任务将异步执行。当您计划此任务并期望在调用该任务时它仍然存在时,您无法查询数据库对象。
因此,您应该只传入保持不变的 Python 值,并让您的任务连接到数据库并根据您传入的参数进行查找。
如果这个任务只为一个特定的用户执行任务,那么一定要传递那个用户的标识符(用户 ID、电子邮件,任何你可以用来从数据库中查找用户的东西)。
【讨论】:
以上是关于如何在 Django 应用程序中使用 celery 执行任务?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django 中将 api 放入 celery 任务中?
如何在 Celery-Django 应用程序中监视来自工作人员的事件?