V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xchaoinfo
V2EX  ›  Python

Python 项目部署, uwsgi 还是 gunicorn ? 或者其他选择

  •  
  •   xchaoinfo · 2020-10-17 11:38:21 +08:00 · 7987 次点击
    这是一个创建于 1258 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想问下目前这两种方案有哪些坑儿? 目前遇到 uwsgi 需要依赖一些 c lib, gunicorn 性能和功能不如 gunicorn

    第 1 条附言  ·  2020-10-17 21:44:35 +08:00
    目前使用的是 gunicorn 部署的 django 项目, nginx 做静态文件的托管,
    但是启动和管理 gunicorn 需要自己杀 进程还是挺麻烦的,
    不选择 uwsgi 的原因是, 系统的版本比较多和乱, 有时候会有 c lib 缺失的问题, 服务上又不能随意的安装软件
    38 条回复    2020-11-11 23:18:29 +08:00
    est
        1
    est  
       2020-10-17 12:01:22 +08:00
    啊。。。gunicorn 不依赖 libev 了?


    个人觉得 uWSGI >>>>> gunicorn 。

    如果你嫌弃 uWSGI 安装麻烦请直接上二进制包 pip install pyuwsgi 。
    yonng
        2
    yonng  
       2020-10-17 12:10:33 +08:00 via iPhone
    Nginx unit
    fub2020
        3
    fub2020  
       2020-10-17 12:32:22 +08:00 via iPhone
    最大的坑就是,只有 windows 生产环境的时候 uwsgi 就没法部署了
    wuwukai007
        4
    wuwukai007  
       2020-10-17 12:34:31 +08:00 via Android
    gunicorn 性能差一点,但是可以用 py 文件写配置
    geebos
        5
    geebos  
       2020-10-17 13:05:38 +08:00
    @fub2020 用 apache 还是可以部署的,只是比较麻烦
    noqwerty
        6
    noqwerty  
       2020-10-17 13:39:07 +08:00 via Android
    可以参考一下 https://github.com/tiangolo 的 dockerfiles
    cz5424
        7
    cz5424  
       2020-10-17 14:02:50 +08:00 via iPhone
    日常 gunicorn,性能还行,win 的时候 gunicorn 也不行
    Te11UA
        8
    Te11UA  
       2020-10-17 14:22:11 +08:00
    感觉都差不多,静等大佬解释有啥区别
    ytmsdy
        9
    ytmsdy  
       2020-10-17 14:27:16 +08:00
    uWsgi 吧,装个依赖而已。。。
    访问量没有到一定数量级的时候,性能问题忽略不计。
    自己熟悉那个装那个吧。
    triangle111
        10
    triangle111  
       2020-10-17 15:36:02 +08:00
    新公司直接部署到容器上,然后用的 python main.py
    不忍直视
    wuwukai007
        11
    wuwukai007  
       2020-10-17 15:39:32 +08:00 via Android
    @triangle111 flask 吧,遇到过好几个项目了,直接 python main.py
    dcalsky
        12
    dcalsky  
       2020-10-17 15:53:36 +08:00 via Android
    uwsgi 性能比 gunicorn 高不了多少,问题多了不少。比如配置,worker 之类的问题遇到了不少。
    dcoder
        13
    dcoder  
       2020-10-17 15:57:33 +08:00
    @xchaoinfo
    为了简单可靠,还是 gunicorn 吧, 出活快, 容易维护.
    为了性能... 就不要折腾 Python, 换 Go 吧.
    inframe
        14
    inframe  
       2020-10-17 16:30:29 +08:00
    tornado 套一下也行,变成纯 python 的

    http_server = HTTPServer(WSGIContainer(app))
    iConnect
        15
    iConnect  
       2020-10-17 17:32:42 +08:00 via Android   ❤️ 1
    等 nginx + gunicorn 多 worker 都能成为瓶颈,你的项目起码市值破亿。
    neoblackcap
        16
    neoblackcap  
       2020-10-17 19:57:02 +08:00
    纯 WSGI server,uwsgi 比 gunicorn 高不了多少,gunicorn 还能换 worker 提升执行效率。uwsgi 关键在于它与 web server 的结合比较好,同时干了很多其他的事情,比如进程管理啥的。明白自己的需求再选择
    xchaoinfo
        17
    xchaoinfo  
    OP
       2020-10-17 21:40:08 +08:00
    @est uwsgi 在比较老的机器上遇到 c lib 依赖的坑, gunicorn 目前没有发现类似的问题.
    abersheeran
        18
    abersheeran  
       2020-10-17 21:45:07 +08:00   ❤️ 2
    Django 用以跑分的配置是 gunicorn+meinheld 。你应该就懂该用哪个了。
    xchaoinfo
        19
    xchaoinfo  
    OP
       2020-10-17 21:52:53 +08:00
    @abersheeran 感谢, 这个方案我也尝试下, 不知道兼容性如何
    sunhk25
        20
    sunhk25  
       2020-10-17 21:58:12 +08:00 via Android
    @fub2020 问一下 Windows 下生产环境部署有什么建议吗
    so1n
        21
    so1n  
       2020-10-17 22:53:41 +08:00 via Android
    supervisor 管理 gunicorn 进程啊
    ClericPy
        22
    ClericPy  
       2020-10-17 22:56:12 +08:00   ❤️ 1
    系统问题上 docker
    性能问题上 Cython/uvloop/Django-channels (都特么 python 了还要什么性能, 直接水平扩容算了)
    依赖问题用 pipenv/poetry/shiv/venv
    守护问题用 systemd/airflow/azkaban/supervisor

    现在一直在 asgi, 所以上面的东西都是我胡编的 :)
    cz5424
        23
    cz5424  
       2020-10-17 22:58:17 +08:00 via iPhone
    @sunhk25 waitress
    hushao
        24
    hushao  
       2020-10-18 00:20:19 +08:00
    python 性能问题最后再定位到部署上面,哪个熟悉用哪个,相同配置下的部署层面差别不明显
    black11black
        25
    black11black  
       2020-10-18 03:42:59 +08:00
    @iConnect 他这个应该是后端瓶颈,不是配置瓶颈
    zachlhb
        26
    zachlhb  
       2020-10-18 09:14:57 +08:00 via Android
    @inframe 我同样也是 tornado 套 django,部署很方便,而且可以连同起很多服务,一个脚本就搞定
    wdhwg001
        27
    wdhwg001  
       2020-10-18 09:26:47 +08:00
    作为 ASGI 用户,每次看到 WSGI 们纠结 Windows 就觉得有 Uvicorn 真好,Waitress 到现在连个 SSL 都不支持,Uvicorn 功能已经做到快和 Gunicorn 齐平了。
    est
        28
    est  
       2020-10-18 12:35:31 +08:00
    @xchaoinfo 那是 pip install uwsgi 的坑啊。现在 pip install pyuwsgi 没坑。
    linnchord
        29
    linnchord  
       2020-10-18 16:17:07 +08:00
    新手就用 gunicorn

    通过 supervisor 管理 gunicorn,提供启停管理服务。
    ytymf
        30
    ytymf  
       2020-10-19 09:40:00 +08:00   ❤️ 1
    @sunhk25 IIS+wfastcgi
    di94sh
        31
    di94sh  
       2020-10-19 11:12:18 +08:00
    @est #1 pre-fork:uwsgi 是初始化之后才 fork 的, gunicorn 是 fork 之后初始化 感觉这个就挺坑的。。
    est
        32
    est  
       2020-10-19 11:17:34 +08:00
    @di94sh 有啥坑的。。lazy-app 了解一下。

    https://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html#preforking-vs-lazy-apps-vs-lazy

    https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html

    很多人是被 uWSGi 的文档给夯退的。这个我承认。。。gunicorn 一页就能把所有参数给全的确很不错。但是 too simple 。。
    timonwong
        33
    timonwong  
       2020-10-19 11:47:02 +08:00
    @est 还有个最大的坑就是 uwsgi 的 http 实现极其不完善(甚至还有 http 和 http-socket 的区别) ,最好用 uwsgi 协议。如果用 HTTP,前面挂 nginx,不要直接对外或者挂在 ELB 后面
    est
        34
    est  
       2020-10-19 11:51:24 +08:00
    @timonwong http 的实现挺完善了。http-socket 是用来作为 nginx 的 upstream 的没啥问题啊。甚至还有 http11-socket 。


    你要说 uWSGI 的不完善,怎么也比 gunicorn 的完善啊。。。

    uwsgi 协议我现在觉得不香了。因为是一个请求一个连接。。太费 tcp 了。。
    SjwNo1
        35
    SjwNo1  
       2020-10-20 09:44:05 +08:00
    gunicorn 方式部署好像不兼容一些 pyhton 的 socket 工具
    andych3n
        36
    andych3n  
       2020-10-20 11:12:15 +08:00
    nginx + gunicorn
    macrosea
        37
    macrosea  
       2020-11-09 23:32:37 +08:00
    good comments, mark
    macrosea
        38
    macrosea  
       2020-11-11 23:18:29 +08:00
    flask + nginx + uwsgi 无法利用多核,uwsgi 配置:
    callable=app
    processes=4
    threads=4
    lazy-apps=true
    哪位大佬 帮忙看看?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3235 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:45 · PVG 19:45 · LAX 04:45 · JFK 07:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.