从特定时间定期发送电子邮件django celery

时间:2018-08-01 08:46:53

标签: django-celery

我在Django模型中有活动列表。我需要每15分钟向用户发送一次电子邮件,直到活动完成(如果活动状态为“高”)。

我遵循的步骤:

1。创建芹菜任务

2。使用apply_async(eta ='time object')触发了此任务

3。我在CELERYBEAT_SCHEDULE中注册了此任务

#1.celery task
@shared_task
def periodic_send_email(self, *args, **kwargs):
   #Logic for sending email

#2.task triggering
periodic_send_email.apply_async(eta= "I used time object", retry= True)

#3.registering the task in settings:
CELERYBEAT_SCHEDULE = {
'periodic_send_email': {
    'task': 'cloud_app.tasks.periodic_send_email',
    'schedule': crontab(),
},
}

2 个答案:

答案 0 :(得分:0)

用于启动调度程序; http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#starting-the-scheduler

Crontab调度程序; http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#crontab-schedules

您不需要任务触发器。您应该将crontab设置为crontab(minute="*/15")

from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
'periodic_send_email': {
    'task': 'cloud_app.tasks.periodic_send_email',
    'schedule': crontab(minute="*/15"),
},
}

而且,您必须使用-B参数开始芹菜。 首先,使用命令启动celery worker;

celery -A proj worker -B

之后,开始芹菜拍;

celery -A proj beat

答案 1 :(得分:0)

我有一个。 我们可以使用数据库支持的定期任务。
包裹:django-celery-beat

https://django-celery-beat.readthedocs.io/en/latest/

在管理面板中,我们可以创建具有特定间隔的定期任务,并且可以存储args,kwargs。