[英]How can I schedule Celery Group to run at specific time?
我具有以下正常功能,该功能创建Celery Group并尝试在特定时间运行Group中的所有子任务:
def run_sms_task(smstask):
if smstask:
phones = []
for user in smstask.userlist.users.all():
phones.append(user.profile.phone)
tasks = []
for phone in phones:
tasks.append(send_sms_async.s(phone, smstask.text))
job = group(tasks)
result = job.apply_async(eta=smstask.starts_at)
result.save()
return result.id
return None
当我调用此函数时,而不是在定义的“ starts_at”处,将触发所有子任务。 怎么了? 谢谢!
PS出于测试原因,我编写了一个函数,如果单独启动任务,该函数对我来说很好用:
def run_sms_task_test1(smstask):
if smstask:
phones = []
for user in smstask.userlist.users.all():
phones.append(user.profile.phone)
tasks = []
for phone in phones:
send_sms_async.apply_async([phone, smstask.text], eta=smstask.starts_at)
return None
可能是时区问题。
尝试使用以下解决方案
from pytz import timezone
from datetime import datetime
london_tz = pytz.timezone('Europe/London')
london_dt = london_tz.localize(datetime.datetime(year, month, day, hour, min))
starts_at = london_dt.astimezone(pytz.UTC)
result = job.apply_async(eta=starts_at)
希望这对您有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.