這個問題涉及到在web服務器上有大量睡眠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()
撲殺唯一的網址時,他們已經過期後,我使用的是相同的技術,只有定時器睡眠更長的時間(一般爲5天)。
所以,我想問你的SO如下:
是具有大numnber睡眠的線程會嚴重影響性能?未來有沒有更好的技術來安排一次性事件。如果可能的話,我想保留在python中;沒有通過sys
致電at
或cron
。
該網站是不完全高流量;每週訂購產品的(慷慨)上限約爲100.與購物車預訂相結合,這可能意味着任何時候都有100多條睡眠線程。我會後悔以這種方式安排任務嗎?
謝謝
如果服務器出現故障,您可能需要一個比線程更持久的解決方案。據我所知,你必須搜索你的日誌文件,告訴哪些產品在崩潰後被保留(儘管你不知道它們被保留了多長時間以上代碼)。 – tgray 2010-02-01 20:37:24
你說得很好,正因爲如此,我已經開始在數據庫中存儲一些記錄。 – pisswillis 2010-02-02 17:13:49
你假設你的服務器不會重新啓動,並且你不會得到成千上萬的訂單,對吧?一個更強大的選項是一個持久的數據庫排隊系統,比如RabbitMQ。 – 2013-01-10 10:59:32