在django中使用celerybeat时,我想安排一个任务在特定时间启动,然后每5分钟运行一次。我能够使用 crontab(minute='*/5') 让任务每 5 分钟运行一次,这将在 celerybeat 启动后运行,但我想在例如 8:30 运行它,该怎么做?
首先,您将任务设置为每 5 分钟运行一次,并且您已经完成了。
第二步是将您的任务主体包装成一个条件,以检查它在当前时间是否应该运行。 像这样的
from django.utils import timezone
import datetime
@app.task
def my_task():
now = timezone.now().time()
start_time = datetime.time(8, 30, 0)
end_time = datetime.time(17, 30, 0)
if now >= start_time and now < end_time:
# your task ...
不完全是您要找的东西,因为这需要您的任务在特定的整小时内运行,而不是像您所说的从半小时开始:
crontab(minute='*/5',hour='8,9,10')
在此基础上,您可以使用多个语句来完成这项工作。
如果你想让它从 8:30 运行到 11:30,你可以这样做:
crontab(minute='30,35,40,45,50,55',hour='8')
crontab(minute='*/5',hour='9,10')
crontab(minute='0,5,10,15,20,25,30',hour='11')
您可以在这里参考文档https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html