Python 如何安排芹菜组在特定时间运行?
我有以下正常功能,创建芹菜组并尝试在特定时间运行组中的所有子任务:Python 如何安排芹菜组在特定时间运行?,python,django,celery,Python,Django,Celery,我有以下正常功能,创建芹菜组并尝试在特定时间运行组中的所有子任务: 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:
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”处。怎么了?谢谢
另外,出于测试原因,我编写了一个函数,如果单独启动任务,该函数对我来说运行良好:
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)
希望这对您有所帮助。好主意!我还使用everywhere timezone.localtime(timezone.now())。我现在将编辑问题,以显示测试函数,它实际上运行良好。等一下!