python docker 多進程提供 穩定tensorflow gpu 線上服務

 

 

  嘗試了太多的python多進程的服務,在tensorflow 的線上GPU服務中老是不理想。tensorlfow serving docker服務這些也有些不便。python

  今天抽空給你們分享一個成功的經驗。失敗的坑就太多了,不扯了。包括mutiprocess 和gevent,都不太理想。nginx

  一、使用gunicorn。怎麼使用的本身查一下。docker

  二、gunicorn --bind 0.0.0.0:10010 -w 3  app_×××:appflask

  三、在docker裏這樣啓動後,雖然是多進程,可是速度並無加快。怎麼辦?很是簡單啓動命令加上 --worker-class gevent。ubuntu

  gunicorn --bind 0.0.0.0:10010 -w 3  --worker-class gevent app_***:appapp

  瞭解gunicorn的詳情的能夠參看下面的文字:spa

1、unix

建立flask應用code

文件名 abc.py進程

# -*- coding:utf-8 -*- from flask import Flask import time app = Flask(__name__) @app.route('/') def index(): time.sleep(0.01) # 模擬程序阻塞 return 'hello world!' if __name__ == '__main__': app.run()


2、

執行命令

  gunicorn --bind 0.0.0.0:10010 -w 3  --worker-class gevent abc:app

#gunicorn --workers 3 --bind unix:myproject.sock --daemon -m 007 --user www-data --worker-class gevent wsgi:app 

--worker-class 進行工做模式,默認是sync,會形成程序阻塞,這裏使用gevent。
--workers 指定啓動多少個進程,根據機器cpu核數來定。
--bind 指定通信綁定到哪一個.sock文件上。
--daemon 指定後臺啓動。
--user 指定用哪一個用戶啓動這個進程,因爲ubuntu採用apt-get安裝的nginx默認啓動用戶是www-data,因此這裏使用www-data,以避免nginx沒有權限訪問.sock文件。
可以使用top指令查看gunicorn程序啓動狀況:


參考:

https://www.jianshu.com/p/f5c271d95e39
相關文章
相關標籤/搜索