[英]Tornado/Twisted - Celery - Gevent Comparison
我在理解這三個框架之間的差異時遇到了一些麻煩:
這三個框架可以用於同時運行代碼,但使用不同數量的線程/進程或代碼樣式以不同的方式執行此操作。 這就是我現在理解差異的方式:
我現在遇到的問題是:
Tornado / Twisted能夠接受(幾乎)任意數量的套接字,因為它們使用異步代碼並在I / O循環中對請求進行排隊。
Celery / Gevent能夠做到這一點嗎? 他們是否必須生成一個新的進程/線程才能接受新的套接字?
我試圖弄清楚哪種技術最適合構建實時Web應用程序。
Gevent隱式使用greenlet代替IO循環上的線程,因此在Twtisted / Tornado的情況下沒有反應器/ IO循環來手動啟動。 它還具有修補現有庫以支持其操作的能力,Tornado和Twisted需要特定的庫來處理它們的事件循環,盡管你會發現許多已經存在。
Celery為后台處理做了更多工作,以便將昂貴的計算卸載到另一個進程/服務器。
進程可以共享內存,但不能與線程共享內存。 CPython中的線程受GIL影響 ,如果你正在做任何CPU密集型操作,通常不值得使用線程解決方案。
我不確定Celery的內存要求,但如果你使用1個網絡進程和1個后台進程,即使在256MB VPS上也應該沒問題,但如果你支持很多連接則會更好。
可以使用Tornado / Twisted / Gevent處理的套接字數量可能受每個套接字完成IO的數量和頻率的限制。 低頻/低帶寬套接字更容易支持大量並發連接,因為它們通常是空閑的。
Celery仍然需要一些應用程序來監聽套接字並使用Celery守護程序進行調用。 它還支持Gevent,因此您可以根據需要同時處理多個任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.