簡體   English   中英

龍卷風中的並發性是否可行?

[英]Is concurrency possible in tornado?

我知道tornado是一個單線程和非阻塞服務器,因此請求按順序處理(除非使用事件驅動方法進行IO操作)。

有沒有辦法在龍卷風中並行處理多個請求以進行正常(非IO)執行。 我不能分叉多個進程,因為我需要跨請求的公共內存空間。

如果不可能,請向我建議其他可以處理並行請求的python服務器,並且還支持wsgi。

如果您真的要處理多個計算綁定的同時請求,並且您希望在Python中執行它,那么您需要一個多進程服務器,而不是多線程服務器。 CPython具有全局解釋器鎖(GIL),可防止多個線程同時執行python字節碼。

大多數Web應用程序執行的計算非常少,而是等待來自數據庫,磁盤或其他服務器上的服務的I / O. 確保在丟棄Tornado之前需要處理計算限制請求。

您的問題的答案實際上取決於這些計算綁定線程將運行多長時間。 如果它們短時間運行,並且處理它們的速度至少與它們到達的速率相匹配,那么龍卷風就可以了。 它確實是單線程的,但它確實可以很好地擴展。

如果您的計算綁定請求長時間運行,那么使用線程服務器不一定會有所幫助,因為正如Ned Batchelder已經指出的那樣,GIL將成為瓶頸。

如果您能夠放寬對所有請求具有相同內存空間的限制,那么您可以考慮使用PyZMQ運行Tornado,因為它提供了一種運行多個Tornado后端的方法,前面是一個Tornado實例。 這使您可以繼續使用Tornado來獲得整個解決方案。 有關更多信息,請參閱PyZMQ的web.zmqweb模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM