Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何安排芹菜组在特定时间运行?_Python_Django_Celery - Fatal编程技术网

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())。我现在将编辑问题,以显示测试函数,它实际上运行良好。等一下!