1.使用Flask的做服務器框架,可以以python code.py的方式運行,但這種方式不能用於生產環境,不穩定,比如說: 有一定概率遇到連接超時無返回的情況
1,通過設置app.run()的參數,來達到多進程的效果。看一下app.run的具體參數:
注意: threaded與processes不能同時打開,如果同時設置的話,將會出現以下的錯誤:
2.使用gevent做協程,從而解決高併發的問題:
3.通過Gunicorn(with gevent)的形式對app進行包裝,從而來啟動服務【推薦】
安裝遵循了WSGI協議的gunicorn服務器--俗稱:綠色獨角獸
查看命令行選項: 安裝gunicorn成功後,通過命令行的方式可以查看gunicorn的使用信息。
指定進程和端口號: -w: 表示進程(worker) --bind:表示綁定ip地址和端口號(bind) —threads 多線程 -k 異步方案
運行方案2: 將運行的信息加載到配置文件中
使用gunicorn + gevent 開啟高併發
使用 meinheld + gunicorn + flask 開啟高併發神器
拓展
概念:協程就是協同工作的程序,不是進程也不是線程 理解成--不帶返回值的函數調用。
歷史遺留問題—GIL鎖
解決方案:python的高併發更加推薦多進程+協程
io多路複用
python異步實現
多進程 + 協程 + callback(io多路複用做事件驅動)
協程 第三方封裝庫:
- gevent = greenlet + python.monkey(底層使用 libevent 時間複雜度: O(N * logN))
- meinheld = greenlet + picoev (時間複雜度: O(N) )
- eventlet
picoev和libevent
理解----協程&線程&進程
2.思考:協程之前切換的場景?
程序發送阻塞的時候切換
- 讀磁盤
- 讀寫文件
- 網絡io操作
- 收發http請求
閱讀更多 黑馬程序員 的文章