芹菜执行计划任务一百次

Celery executing scheduled task a hundred times

我在我的 Django 应用程序中配置了芹菜,以便每天早上 运行 执行一项任务。该任务只是向一组用户发送电子邮件。问题是同一封邮件被发送了几百次!!

这是我的芹菜配置:

BROKER_URL = 'redis://127.0.0.1:6379/0'
BROKER_TRANSPORT = 'redis'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    'alert_user_is_not_buying-everyday-at-7': {
        'task': 'opti.tasks.alert_users_not_buying',
        'schedule': crontab(hour=7, minute=0),
    },
}

任务是:

@app.task(bind=True)
def alert_user_is_not_buying(self):
    send_mail_to_users()

然后我使用此命令启动 worker 并击败(为此我使用 supervisor):

exec celery --app=opti beat --loglevel=INFO
exec celery --app=opti worker --loglevel=INFO

我相信我的 send_mail_to_users() 方法没有问题,看起来每 30 秒发送一次电子邮件....

缺少什么?

您的 CELERYBEAT_SCHEDULE 设置可能未被使用,因为您已将 CELERYBEAT_SCHEDULER 设置为使用 DatabaseScheduler。该调度程序是如何配置的?我想这就是问题所在。