摘录如下:
from celery.task.schedules import crontab
from celery.decorators import periodic_task
@periodic_task(
run_every=crontab(minute='15, 45', hour='0, 7, 15'),
)
def task1():
send_mail()
我希望仅在 00:15 , 7:15 和 15触发 task1()中的脚本: 45 ,而在当前设置下,它是在 00:15 , 00:45 , 7:15 , 7:45 , 15:15 和 15:45 。
我该怎么做?另外,请告诉我是否有更好的方法!
答案 0 :(得分:0)
您有两个选择。一种是多次定义修饰的函数:
def _task1():
send_mail()
task1_a = @periodic_task(
_task1,
run_every=crontab(minute='15', hour='0, 7'),
)
task1_b = @periodic_task(
_task1,
run_every=crontab(minute='45', hour='15'),
)
另一种选择是定义实现celery's schedule interface的自定义时间表。
答案 1 :(得分:0)
通读了version,并借鉴了documentation的一些想法之后,我开始如下解决问题:
删除 periodic_task 装饰器并更新 tasks.py 为:
from celery.task.schedules import crontab
from celery.decorators import periodic_task
@task
def task1():
send_mail()
在 celery.py 中将节拍时间表添加为:
app.conf.beat_schedule = {
'alert': {
'task': 'app.tasks.task1',
'schedule': crontab(minute='15', hour='0, 7')
},
'custom_alert': {
'task': 'app.tasks.task1',
'schedule': crontab(minute='45', hour='15')
}
}
通过这些设置, task1()中的 script 仅在所需时间(0:15、7:15和15:45)被触发!>