Этот вопрос относится к нарушениям производительности, которые могут возникнуть или не возникнуть из-за большого количества спящих потоков python на веб-сервере.Python: штраф за спящие темы
Справочная информация: Я реализую интернет-магазин, используя django/satchmo. Требование относится к задержке платежа. Клиент может зарезервировать продукт и позволить третьему лицу оплатить его позднее (с помощью случайного и уникального URL-адреса).
Чтобы обрабатывать неуправляемый предмет, я создаю поток, который будет спать в течение времени резервирования, а затем удалите резервирование/отметьте продукт как проданный при его пробуждении. Это выглядит следующим образом:
#Reserves a product when it is placed in the cart
def reserve_cart_product(product):
log.debug("Reserving %s" % product.name)
product.active = False
product.featured = False
product.save()
from threading import Timer
Timer(CART_RESERVE_TIME, check_reservation, (product,)).start()
Я использую ту же технику, когда забой уникальных URL-адрес после того, как они истекли, только таймер спит гораздо дольше (обычно 5 дней).
Итак, мой вопрос к вам SO выглядит следующим образом:
Оказывает большое numnber сонной темы собирается серьезно повлиять производительность? Существуют ли лучшие методы для планирования одного события в будущем. Я хотел бы сохранить это в python, если это возможно; без звонка at
или cron
через sys
.
Сайт не является точным высоким трафиком; (щедрый) верхний предел для товаров, заказанных в неделю, будет около 100. В сочетании с резервированием тележки это может означать, что в каждый момент времени существует более 100 спальных нитей. Буду сожалеть о планировании задач таким образом?
Thanks
Возможно, вам понадобится более устойчивое решение, чем потоки, если ваш сервер опустится. Насколько я могу судить, вам придется искать файл журнала, чтобы сообщить, какие продукты были зарезервированы после сбоя (хотя вы не знаете, как долго они были зарезервированы для вышеуказанного кода). – tgray
Вы делаете хороший момент, и именно по этой причине я начал хранить некоторую запись в БД. – pisswillis
Вы предполагаете, что ваш сервер не перезапустится, и вы не получите тысячи заказов, не так ли? Более надежным вариантом будет постоянная система очередности баз данных, такая как RabbitMQ. –