Python 烧瓶+;第三方通知上的芹菜任务重复

Python 烧瓶+;第三方通知上的芹菜任务重复,python,flask,redis,celery,Python,Flask,Redis,Celery,我有一个flask应用程序,它在特定时间使用ETA/Countdown芹菜功能向用户发送电子邮件/短信,以Redis为代理,问题是电子邮件和短信任务随机重复-有时用户收到10封电子邮件/短信,有时用户收到20多封这些任务,任务只应运行一次。数据流: 初始函数计划\事件\主调用带有通知的ETA任务 内部功能schedule\u ratings\u email&schedule\u ratings\u sms任务是.delay任务功能,它创建单个芹菜任务,以便向活动的各个来宾发送电子邮件和sms 这

我有一个flask应用程序,它在特定时间使用ETA/Countdown芹菜功能向用户发送电子邮件/短信,以Redis为代理,问题是电子邮件和短信任务随机重复-有时用户收到10封电子邮件/短信,有时用户收到20多封这些任务,任务只应运行一次。数据流:

  • 初始函数计划\事件\主调用带有通知的ETA任务
  • 内部功能schedule\u ratings\u email&schedule\u ratings\u sms任务是.delay任务功能,它创建单个芹菜任务,以便向活动的各个来宾发送电子邮件和sms
  • 这是最后一个。延迟发送通知的单个任务:
  • 我尝试了多个SO答案,并调整了很多变量,包括芹菜设置,但是通知仍然重复。这只是ETA/倒计时任务,并且仅适用于第三方服务器,因为我有某些ETA任务,这些任务有DB数据写入,并且这些任务没有任何问题

    这是一个关于本地和heroku(生产)的问题。当前技术堆栈: 烧瓶==1.0.2 芹菜==4.1.0 Redis 4.0.9 芹菜启动:worker:芹菜worker--app openseat.tasks--beat--concurrency 1--loglevel信息 芹菜配置详细信息:

    CELERY_ACKS_LATE = True
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_TIMEZONE = 'Africa/Johannesburg'
    CELERY_ENABLE_UTC = True
    
    @app.task(bind=True)
    def schedule_ratings_email(self,event_id):
        """ Fetch feed of URLs to crawl and queue  up a task to grab and process
        each url. """
        try:
            url = SITE_URL + 'user/dashboard'
            guests = db.session.query(EventGuest).filter(EventGuest.event_id == int(event_id)).all()
            event_details = db.session.query(Event).filter(Event.id == event_id).first()
            if guests:
                if event_details.status == "archived":
                    for guest in guests:
                        schedule_individual_ratings_emails.delay(guest.user.first_name, guest.event.host.first_name, guest.user.email,url)
        except Exception as e:
            log.error("Error processing ratings email for %s" % event_id, exc_info=e)
            # self.retry()
    
    
    @app.task()
    def schedule_individual_ratings_emails(guest_name, host, guest, url):
        try:
            email_rating(guest_name, host, guest, url)
        except Exception as e:
            log.error("Error processing ratings email for %s", exc_info=e)
    
    CELERY_ACKS_LATE = True
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_TIMEZONE = 'Africa/Johannesburg'
    CELERY_ENABLE_UTC = True