Я создаю веб-приложение с использованием фляги и сельдерея для периодической отправки почты.Проблема в том, что всякий раз, когда в базе данных появляется новая запись, сельдерей не видит ее и продолжает использовать старые записи.Я должен перезапускать работника сельдерея каждый раз, чтобы он работал нормально.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