этот вопрос относится к снижению производительности, которое может возникнуть или не возникнуть из-за наличия большого количества спящих потоков 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 дней).
Итак, мой вопрос к вам так:
Будет ли большое количество спящих потоков серьезно влиять на производительность? Существуют ли лучшие методы для планирования одного события в будущем. Я хотел бы сохранить это в Python, если это возможно; без звонка at
или cron
через sys
.
Сайт не очень высокий трафик; (щедрый) верхний предел для продуктов, заказанных в неделю, будет около 100. В сочетании с резервированием корзины, это может означать, что в любой момент времени может быть более 100 спящих потоков. Буду ли я сожалеть о планировании задач таким образом?
Спасибо