flask如何處理並發


1、使用自身服務器的多進程或者多線程,參考werkzeug的run_simple函數的入參。注意,進程和線程不能同時開啟

2、使用gunicorn使用多進程,-w worker 進程數,類型於運行多個app.run()開發服務器

gunicorn app -w 2 -b :8000

3、使用gevent異步

/usr/local/bin/gunicorn -t120 -w10  -b 10.57.17.57:3000 --worker-class gevent  Erebus:APP

 

-k STRING, --worker-class STRING
                        The type of workers to use. [sync]

-w INT, --workers INT
                        The number of worker processes for handling requests.
                        [1]

-t INT, --timeout INT
                        Workers silent for more than this many seconds are
                        killed and restarted. [30]

-b ADDRESS, --bind ADDRESS
                        The socket to bind. [['127.0.0.1:8000']]

 

當運行開發服務器時,運行app.run(),你會得到一個單一的同步進程,這意味着一次最多只能處理1個請求。

通過在其默認配置中堅持Gunicorn在它的前面,只是增加 – 工作,你獲得的本質上是一些進程(由Gunicorn管理),每個行為像app.run()開發服務器。 4個worker == 4個並發請求。這是因為Gunicorn默認使用它包含的同步工作類型。

重要的是要注意,Gunicorn還包括異步工作,即eventlet和gevent(和龍卷風,但是最好使用Tornado框架,似乎)。通過使用–worker-class標志指定其中一個異步工作者,您所獲得的是Gunicorn管理多個異步進程,每個進程管理自己的並發。這些進程不使用線程,而是協同程序。基本上,在每個進程內,每次只能發生一件事情(1個線程),但是當對象在等待外部進程完成時(可以考慮數據庫查詢或等待網絡I / O),它們可以被“暫停”。

這意味着,如果你使用Gunicorn的異步工作者,每個工作者可以一次處理多個請求。只有多少工人是最好的取決於你的應用程序的性質,它的環境,它運行的硬件等等。更多的細節可以在Gunicorn’s design頁和notes on how gevent works在其介紹頁上找到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM