Flask+Gunicorn(協程)高併發的解決方法探究

1.使用Flask的做服務器框架,可以以python code.py的方式運行,但這種方式不能用於生產環境,不穩定,比如說: 有一定概率遇到連接超時無返回的情況

1,通過設置app.run()的參數,來達到多進程的效果。看一下app.run的具體參數:

Flask+Gunicorn(協程)高併發的解決方法探究

注意: threaded與processes不能同時打開,如果同時設置的話,將會出現以下的錯誤:

Flask+Gunicorn(協程)高併發的解決方法探究

2.使用gevent做協程,從而解決高併發的問題:

Flask+Gunicorn(協程)高併發的解決方法探究

3.通過Gunicorn(with gevent)的形式對app進行包裝,從而來啟動服務【推薦】

安裝遵循了WSGI協議的gunicorn服務器--俗稱:綠色獨角獸

Flask+Gunicorn(協程)高併發的解決方法探究

查看命令行選項: 安裝gunicorn成功後,通過命令行的方式可以查看gunicorn的使用信息。

Flask+Gunicorn(協程)高併發的解決方法探究

指定進程和端口號: -w: 表示進程(worker) --bind:表示綁定ip地址和端口號(bind) —threads 多線程 -k 異步方案

Flask+Gunicorn(協程)高併發的解決方法探究

運行方案2: 將運行的信息加載到配置文件中

使用gunicorn + gevent 開啟高併發

Flask+Gunicorn(協程)高併發的解決方法探究

使用 meinheld + gunicorn + flask 開啟高併發神器

Flask+Gunicorn(協程)高併發的解決方法探究

拓展

概念:協程就是協同工作的程序,不是進程也不是線程 理解成--不帶返回值的函數調用。

Flask+Gunicorn(協程)高併發的解決方法探究

歷史遺留問題—GIL鎖

Flask+Gunicorn(協程)高併發的解決方法探究

解決方案:python的高併發更加推薦多進程+協程

io多路複用

Flask+Gunicorn(協程)高併發的解決方法探究

python異步實現

多進程 + 協程 + callback(io多路複用做事件驅動)

協程 第三方封裝庫:

  • gevent = greenlet + python.monkey(底層使用 libevent 時間複雜度: O(N * logN))
  • meinheld = greenlet + picoev (時間複雜度: O(N) )
  • eventlet

picoev和libevent

Flask+Gunicorn(協程)高併發的解決方法探究

理解----協程&線程&進程

Flask+Gunicorn(協程)高併發的解決方法探究

2.思考:協程之前切換的場景?

程序發送阻塞的時候切換

  • 讀磁盤
  • 讀寫文件
  • 網絡io操作
  • 收發http請求


分享到:


相關文章: