Сельдерей не берет обновленные значения из базы данных - PullRequest
0 голосов
/ 20 декабря 2018

Я создаю веб-приложение с использованием фляги и сельдерея для периодической отправки почты.Проблема в том, что всякий раз, когда в базе данных появляется новая запись, сельдерей не видит ее и продолжает использовать старые записи.Я должен перезапускать работника сельдерея каждый раз, чтобы он работал нормально.Celery beat работает, и я использую redis в качестве посредника.

Функции, связанные с сельдереем:

@celery.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    sender.add_periodic_task(30.0, appointment_checkout, name='appointment_checkout')


@celery.task(name='app.Blueprints.periods.appointment_checkout')
def appointment_checkout():
    from app.Blueprints.api.routes import fetchAllAppointments, fetch_user_email, fetch_user_phone
    from app.Blueprints import db
    dt = datetime.now() + timedelta(minutes=10)
    #fa = Appointment.query.filter_by(date = dt.strftime("%Y-%m-%d"))
    fa = fetchAllAppointments()
    for i in fa:
        # send emails to clients and counsellors
        try:
            if(str(i.date.year) != dt.strftime("%Y") or str(i.date.month) != dt.strftime("%m") or str(i.date.day) != dt.strftime("%d")):
                continue
        except:
            continue
        if(i.reminderFlag == 1):
            continue
        if(int(dt.strftime("%H")) == int(i.time.hour) and int(dt.strftime("%M")) == int(i.time.minute)):
            client = fetch_user_email(i.user)
            counsellor = fetch_user_email(i.counsellor)
            client_phone = fetch_user_phone(i.user)
            counsellor_phone = fetch_user_phone(i.counsellor)
            i.reminderFlag = 1 
            db.session.add(i)
            db.session.commit()
            # client email
            subject = "appointment notification"
            msg = "<h1>Greetings</h1></p>This is to notify you that your appointment is about to begin soon.</p>"
            sendmail.delay(subject, msg, client)
            sendmail.delay(subject, msg, counsellor)
            sendmsg.delay(client_phone, msg)
            sendmsg.delay(counsellor_phone, msg)

Когда я добавляю что-то в таблицу appointment, сельдерей не видит новогозапись.После перезапуска работника сельдерея он видит его.

Я запускаю бит и работник, используя следующие команды:

celery -A periods beat --loglevel=INFO

celery -A periods worker --loglevel=INFO --concurrency=2
...