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)