Python sleep for second для дросселирования запросов
У меня есть периодическая задача celery, которая имеет вызов функции внутри нее, мне нужно, чтобы код спал в течение секунды на каждые 20 отправленных писем, как я могу этого добиться.
@app.task(bind=True)
def send_email_reminder_on_due_date(self):
send_email_from_template(
subject_template_path='emails/subject.txt',
body_template_path='emails/template.html',
template_data=template_data,
to_email_list=email_list,
fail_silently=False,
content_subtype='html'
)
У меня есть некоторое условие перед send_email_from_template т.е. выборка записей из базы данных с датой исполнения сегодня, и я буду отправлять email для всех записей, которые я получу, скажем, у меня есть 30 записей, для которых мне нужно отправить email, поэтому я сделаю sleep на 1 секунду после выполнения функции email для 20 записей.
Я бы решил эту проблему следующим образом:
- извлечь 20 записей из базы данных (
LIMIT 20
с помощью mysql) - подождите 1 секунду
import time
time.sleep(1) # Sleep for 1 second
- повторите первый шаг
При таком решении более новые электронные письма в базе данных, например, могут быть отозваны или даже изменены.
Есть ли другой способ сделать это без ограничения на уровне базы данных Happy
.
records = mycursor.fetchall()
i = 0
for record in records:
send_email(record)
i = i + 1
if i % 20 == 0:
time.sleep(1)