日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gunicorn部署Flask服务

發布時間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gunicorn部署Flask服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為一個Python選手,工作中需要的一些服務接口一般會用Flask來開發。

Flask非常容易上手,它自帶的app.run(host="0.0.0.0", port=7001)用來調試非常方便,但是用于生產環境無論是處理高并發還是魯棒性都有所欠缺,一般會配合WGSI容器來進行[生產環境的部署][1]。

小磊哥推薦了參考文章[1]中的部署方式,希望將已有的服務放到gunicorn或者Tornado中部署,并用supervisor來管理所有進程(有幾個不同的服務)。

經過調研和嘗試

  • gunicorn可以結合gevent來進行部署,因此在高并發場景下也可適用,于是決定采用gunicorn進行部署。
  • gunicorn和supervisor會有一定的沖突,即使gunicorn中沒有設置為后臺啟動,supervisor也只會管理gunicorn的master進程;
  • supervisor的重啟服務對于無響應的Flask進程來說并不生效,不能很好地解決我的服務由于某些原因無法正常響應但又找不到方法解決的問題,因此暫時決定不用supervisor。
  • 環境安裝

    首先pip安裝gunicorn。
    pip install?gunicorn?--user

    Tips. pip --user用法

    由于是部署在公司云主機上,通常不會給root權限。之前都是提工單給SA sudo裝的,后來發現更安全也更方便的方法是pip install xxx --user,美中不足是安裝完以后需要手動添加PATH
    export PATH=/home/username/.local/bin:$PATH
    方便起見可以加到~/.bash_profile中

    gunicorn?命令啟動

    簡單地,gunicorn可以通過gunicorn?-w 4 -b 127.0.0.1:4000 run:app啟動一個Flask應用。其中,

    • -w 4是指預定義的工作進程數為4,
    • -b 127.0.0.1:4000指綁定地址和端口
    • run是flask的啟動python文件,app則是flask應用程序實例

    其中run.py中文件的可能形式是:

    # run.py from flask import Flask app = Flask(__name__)

    通過gunicorn?-h可以看到gunicorn有非常多的配置項,因此通常會寫成一個config.py文件來進行配置。看了一下文檔似乎沒有給出正確的config.py中配置項的命名,并且有些博客博主給出的配置項命名是錯誤的,導致配置沒有生效,踩了不少的坑(我找不到那篇坑坑的文章了)。這篇博客[2]給出了一些比較常用且正確的配置。

    我所用項目的配置項如下:

    # config.py import os import gevent.monkey gevent.monkey.patch_all()import multiprocessing # debug = True loglevel = 'debug' bind = "0.0.0.0:7001" pidfile = "log/gunicorn.pid" accesslog = "log/access.log" errorlog = "log/debug.log" daemon = True # 啟動的進程數 workers = multiprocessing.cpu_count() worker_class = 'gevent' x_forwarded_for_header = 'X-FORWARDED-FOR'
    1. debug = True

    生產環境不需要這個配置項,但調試的時候還是挺好用的。而且,開啟debug項后,在啟動gunicorn的時候可以看到所有可配置項的配置,如下所示。
    之前在被上一篇博主欺騙的時候,仔細看了調試信息,發現accesslog和errorlog都沒有被配置,所以導致啟動以后看不到任何日志。

    config.py中只需要配置需要修改的項的,大部分采用默認配置即可。默認配置的具體配置內容可以通過gunicorn?-h來查詢。

    *配置文件和調試信息來自兩個不同進程,因此信息可能有細微差異

    # Debug Info[2018-01-18 17:38:47 +0000] [16015] [DEBUG] Current configuration: proxy_protocol: False worker_connections: 1000 statsd_host: None max_requests_jitter: 0 post_fork: <function post_fork at 0x21037d0> errorlog: - enable_stdio_inheritance: False worker_class: gunicorn.workers.ggevent.GeventWorker ssl_version: 2 suppress_ragged_eofs: True syslog: False syslog_facility: user when_ready: <function when_ready at 0x2103500> pre_fork: <function pre_fork at 0x2103668> cert_reqs: 0 preload_app: False keepalive: 2 accesslog: log/debug.log group: 1001 graceful_timeout: 30 do_handshake_on_connect: False spew: False workers: 2 proc_name: None sendfile: None pidfile: log/gunicorn.pid umask: 0 on_reload: <function on_reload at 0x2103398> pre_exec: <function pre_exec at 0x2103d70> worker_tmp_dir: None limit_request_fields: 100 pythonpath: None on_exit: <function on_exit at 0x21065f0> config: gunicorn_conf.py logconfig: None check_config: False statsd_prefix: secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'} reload_engine: auto proxy_allow_ips: ['127.0.0.1'] pre_request: <function pre_request at 0x2103ed8> post_request: <function post_request at 0x2106050> forwarded_allow_ips: ['127.0.0.1'] worker_int: <function worker_int at 0x2103aa0> raw_paste_global_conf: [] threads: 1 max_requests: 0 chdir: /home/hzyangxiao2014/POPORobot/QASP daemon: False user: 1028 limit_request_line: 4094 access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" certfile: None on_starting: <function on_starting at 0x2103230> post_worker_init: <function post_worker_init at 0x2103938> child_exit: <function child_exit at 0x21061b8> worker_exit: <function worker_exit at 0x2106320> paste: None default_proc_name: run:app syslog_addr: udp://localhost:514 syslog_prefix: None ciphers: TLSv1 worker_abort: <function worker_abort at 0x2103c08> loglevel: debug bind: ['0.0.0.0:7001'] raw_env: [] initgroups: False capture_output: False reload: False limit_request_field_size: 8190 nworkers_changed: <function nworkers_changed at 0x2106488> timeout: 30 keyfile: None ca_certs: None tmp_upload_dir: None backlog: 2048 logger_class: gunicorn.glogging.Logger
    2. 日志
    # config.py accesslog = "log/access.log" errorlog = "log/debug.log" loglevel = "debug"
    • 需要log目錄存在。如果不存在,啟動會報錯
    • accesslog是訪問日志,可以通過access_log_format設置訪問日志格式。詳細的方法可以見參考文章[2]
    • loglevel用于控制errorlog的信息級別,可以設置為debug、info、warning、error、critical。
    3. workers

    worker_class是指開啟的每個工作進程的模式類型,默認為sync模式,也可使用gevent模式。

    workers是工作進程數量,在上述config.py中,取的是CPU的數量。需要注意部署機器的性能,不能無限制多開。多篇文章中推薦了multiprocessing.cpu_count() * 2 + 1這個數量,考慮到我會在一個機器上部署兩個服務,因此數量減半。

    4. daemon

    daemon = True意味著開啟后臺運行,默認為False

    總結

    gunicorn的環境配置和使用都比較簡單,也解決了我總是用nohup python run.py >out.log 2>&1 &來啟動Flask后臺服務的問題。

    在采用gunicorn部署之前,我也對后臺服務的目錄結構進行了調整。雖然只是便利工作的服務,也希望可以盡可能變的更加professional~

    轉載于:https://www.cnblogs.com/ExMan/p/10073301.html

    總結

    以上是生活随笔為你收集整理的gunicorn部署Flask服务的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: se欧美| 成年人的视频网站 | 夜夜嗨av | 人妻精品久久久久中文字幕 | 午夜视频在线观看免费视频 | 久久久久这里只有精品 | 好男人天堂网 | 91a视频 | 日本在线中文 | 一区二区三区视频在线观看 | 精久久久久 | 国产精品亚洲一区二区 | 欧美日韩视频免费观看 | 免费看黄色大片 | 一二三四av | 国产在线国偷精品免费看 | 国产ts人妖调教重口男 | 欧美一级二级三级视频 | 欧美日韩成人一区二区在线观看 | cao国产| 午夜寂寞福利 | 波多一区二区 | 欧美做受喷浆在线观看 | 加勒比av在线播放 | 男女啪动最猛动态图 | 综合久久色 | 影音先锋久久 | 精品视频一区二区在线观看 | 久久午夜福利电影 | 国产专区一区二区 | 欧美巨大另类极品videosbest | 韩产日产国产欧产 | 午夜在线小视频 | 天堂8在线天堂资源bt | 国产精品久久久久久久久绿色 | 国产一区二区三区视频在线播放 | 久久精品视频久久 | 二区视频在线 | 手机在线免费看av | 黄色小视频在线观看免费 | 97香蕉久久超级碰碰高清版 | 成人av18 | 人妻丝袜一区 | 一级片a级片| www.啪啪.com| 在线观看免费看片 | 4hu最新网址 | 亚洲熟妇无码久久精品 | av中文天堂 | 日本不卡一区在线观看 | 污污网站免费 | 四虎成人永久免费视频 | 女同亚洲精品一区二区三 | 顶级尤物极品女神福利视频 | www.亚洲欧美 | 午夜色播 | 色吊丝网站 | 日韩在线免费 | 三级特黄视频 | 国产美女久久久 | 黄色日韩| 91香蕉国产在线观看软件 | 国产女人高潮毛片 | 老牛影视av一区二区在线观看 | 18女人毛片 | 白浆网站 | 国产精品无码久久av | 日本亚洲一区 | av网站观看 | 蜜桃精品噜噜噜成人av | 欧美理论在线观看 | 亚洲色图制服丝袜 | 少妇又色又爽又黄的视频 | 欧美激情在线一区二区 | 欧美成人午夜精品久久久 | 国产视频二 | 免费大片黄在线观看 | 日本污视频在线观看 | 哪里可以看免费毛片 | 一级免费片 | 人人草在线 | 男人狂揉女人下部视频 | 亚洲精品91天天久久人人 | 中国黄色一级片 | 麻豆视频在线观看免费 | 黄色一级片黄色一级片 | 大尺度在线观看 | 欧美日韩中文字幕在线播放 | 青青艹av | 香蕉a视频 | 国产黄网站 | 亚洲免费视频一区二区三区 | 超碰97在线免费观看 | 暖暖日本在线 | 国产第八页 | 国产乱色 | 亚洲高清资源 | 青青青草视频在线 | 国产高清第一页 |