[ celery指定时间执行 ]


django中的celery任务指定时间执行

我这里是发送邮件, 定时晚上6点执行

from datetime import datetime, timedelta
from django.conf import settings
from django.utils import timezone
from backend.cews.tasks import send_email_when_check_eform
import pytz

def schedule_email(recipient_email, subject, message):
    """
    Args:
        recipient_email (_type_): 邮件接受者
        subject (_type_): 标题
        message (_type_): 消息html内容
    """
    now = timezone.now()

    target_tz = pytz.timezone(settings.TIME_ZONE)

    now_target_tz = now.astimezone(target_tz)

    target_time = now_target_tz.replace(hour=17, minute=0, second=0, microsecond=0)

    target_time_utc = target_time.astimezone(now.tzinfo)

    if now > target_time_utc:
        target_time_utc += timedelta(days=1)


    send_email_when_check_eform.apply_async(args=(recipient_email, subject, message), eta=target_time_utc)