celerybeat 如何通过调度程序将参数传递给函数?
celerybeat how to pass arguments via scheduler to functions?
我无法通过 celerybeat 计划将参数传递给我的函数。搜索后看起来好像我应该能够使用 args 命令传递它们,但我收到如下错误。谁能指出我正确的方向?
CELERYBEAT_SCHEDULE = {
'maintenance_mail_1_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : (1),
},
'maintenance_mail_3_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : (3),
},
'maintenance_mail_5_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : (5),
},
'maintenance_mail_7_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : (7),
}
任务,py
@app.task
def maintenance_mail(days):
return send_maintnance_emails(days)
以下内容适用于 Python:(1) == 1
为了使其成为单例 tuple
,添加一个额外的逗号:(1,)
并相应地在您的设置中:
# ...
'args' : (1,),
# ...
您可以指定用于执行任务的参数和关键字参数,如下所示。请注意如何 JSON 需要序列化。
import json
CELERYBEAT_SCHEDULE = {
'maintenance_mail_1_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : json.dumps([1]),
}
}
或
import json
CELERYBEAT_SCHEDULE = {
'maintenance_mail_1_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'kwargs' : json.dumps({
'days': 1,
}),
}
}
更多信息在这里:django-celery-beat documentation
我无法通过 celerybeat 计划将参数传递给我的函数。搜索后看起来好像我应该能够使用 args 命令传递它们,但我收到如下错误。谁能指出我正确的方向?
CELERYBEAT_SCHEDULE = {
'maintenance_mail_1_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : (1),
},
'maintenance_mail_3_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : (3),
},
'maintenance_mail_5_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : (5),
},
'maintenance_mail_7_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : (7),
}
任务,py
@app.task
def maintenance_mail(days):
return send_maintnance_emails(days)
以下内容适用于 Python:(1) == 1
为了使其成为单例 tuple
,添加一个额外的逗号:(1,)
并相应地在您的设置中:
# ...
'args' : (1,),
# ...
您可以指定用于执行任务的参数和关键字参数,如下所示。请注意如何 JSON 需要序列化。
import json
CELERYBEAT_SCHEDULE = {
'maintenance_mail_1_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'args' : json.dumps([1]),
}
}
或
import json
CELERYBEAT_SCHEDULE = {
'maintenance_mail_1_day': {
'task': 'home.tasks.maintenance_mail',
'schedule': crontab(hour='15'),
'kwargs' : json.dumps({
'days': 1,
}),
}
}
更多信息在这里:django-celery-beat documentation