想问下目前这两种方案有哪些坑儿? 目前遇到 uwsgi 需要依赖一些 c lib, gunicorn 性能和功能不如 gunicorn
![]() | 1 est 2020-10-17 12:01:22 +08:00 啊。。。gunicorn 不依赖 libev 了? 个人觉得 uWSGI >>>>> gunicorn 。 如果你嫌弃 uWSGI 安装麻烦请直接上二进制包 pip install pyuwsgi 。 |
2 yonng 2020-10-17 12:10:33 +08:00 via iPhone Nginx unit |
![]() | 3 fub2020 2020-10-17 12:32:22 +08:00 via iPhone 最大的坑就是,只有 windows 生产环境的时候 uwsgi 就没法部署了 |
![]() | 4 wuwukai007 2020-10-17 12:34:31 +08:00 via Android gunicorn 性能差一点,但是可以用 py 文件写配置 |
![]() | 6 noqwerty 2020-10-17 13:39:07 +08:00 via Android 可以参考一下 https://github.com/tiangolo 的 dockerfiles |
![]() | 7 cz5424 2020-10-17 14:02:50 +08:00 via iPhone 日常 gunicorn,性能还行,win 的时候 gunicorn 也不行 |
![]() | 8 Te11UA 2020-10-17 14:22:11 +08:00 感觉都差不多,静等大佬解释有啥区别 |
![]() | 9 ytmsdy 2020-10-17 14:27:16 +08:00 uWsgi 吧,装个依赖而已。。。 访问量没有到一定数量级的时候,性能问题忽略不计。 自己熟悉那个装那个吧。 |
![]() | 10 triangle111 2020-10-17 15:36:02 +08:00 新公司直接部署到容器上,然后用的 python main.py 不忍直视 |
![]() | 11 wuwukai007 2020-10-17 15:39:32 +08:00 via Android @triangle111 flask 吧,遇到过好几个项目了,直接 python main.py |
![]() | 12 dcalsky 2020-10-17 15:53:36 +08:00 via Android uwsgi 性能比 gunicorn 高不了多少,问题多了不少。比如配置,worker 之类的问题遇到了不少。 |
13 dcoder 2020-10-17 15:57:33 +08:00 |
![]() | 14 inframe 2020-10-17 16:30:29 +08:00 tornado 套一下也行,变成纯 python 的 http_server = HTTPServer(WSGIContainer(app)) |
15 iConnect 2020-10-17 17:32:42 +08:00 via Android ![]() 等 nginx + gunicorn 多 worker 都能成为瓶颈,你的项目起码市值破亿。 |
16 neoblackcap 2020-10-17 19:57:02 +08:00 纯 WSGI server,uwsgi 比 gunicorn 高不了多少,gunicorn 还能换 worker 提升执行效率。uwsgi 关键在于它与 web server 的结合比较好,同时干了很多其他的事情,比如进程管理啥的。明白自己的需求再选择 |
![]() | 18 abersheeran 2020-10-17 21:45:07 +08:00 ![]() Django 用以跑分的配置是 gunicorn+meinheld 。你应该就懂该用哪个了。 |
19 xchaoinfo OP @abersheeran 感谢, 这个方案我也尝试下, 不知道兼容性如何 |
![]() | 21 so1n 2020-10-17 22:53:41 +08:00 via Android supervisor 管理 gunicorn 进程啊 |
![]() | 22 ClericPy 2020-10-17 22:56:12 +08:00 ![]() 系统问题上 docker 性能问题上 Cython/uvloop/Django-channels (都特么 python 了还要什么性能, 直接水平扩容算了) 依赖问题用 pipenv/poetry/shiv/venv 守护问题用 systemd/airflow/azkaban/supervisor 现在一直在 asgi, 所以上面的东西都是我胡编的 :) |
![]() | 24 hushao 2020-10-18 00:20:19 +08:00 python 性能问题最后再定位到部署上面,哪个熟悉用哪个,相同配置下的部署层面差别明显 |
![]() | 25 black11black 2020-10-18 03:42:59 +08:00 @iConnect 他这个应该是后端瓶颈,不是配置瓶颈 |
![]() | 26 zachlhb 2020-10-18 09:14:57 +08:00 via Android @inframe 我同样也是 tornado 套 django,部署很方便,而且可以连同起很多服务,一个脚本就搞定 |
![]() | 27 wdhwg001 2020-10-18 09:26:47 +08:00 作为 ASGI 用户,每次看到 WSGI 们纠结 Windows 就觉得有 Uvicorn 真好,Waitress 到现在连个 SSL 都不支持,Uvicorn 功能已经做到快和 Gunicorn 齐平了。 |
![]() | 29 linnchord 2020-10-18 16:17:07 +08:00 新手就用 gunicorn 通过 supervisor 管理 gunicorn,提供启停管理服务。 |
![]() | 31 di94sh 2020-10-19 11:12:18 +08:00 @est #1 pre-fork:uwsgi 是初始化之后才 fork 的, gunicorn 是 fork 之后初始化 感觉这个就挺坑的。。 |
![]() | 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 。。 |
33 timonwong 2020-10-19 11:47:02 +08:00 @est 还有个最大的坑就是 uwsgi 的 http 实现极其不完善(甚至还有 http 和 http-socket 的区别) ,最好用 uwsgi 协议。如果用 HTTP,前面挂 nginx,不要直接对外或者挂在 ELB 后面 |
![]() | 34 est 2020-10-19 11:51:24 +08:00 @timonwong http 的实现挺完善了。http-socket 是用来作为 nginx 的 upstream 的没啥问题啊。甚至还有 http11-socket 。 你要说 uWSGI 的不完善,怎么也比 gunicorn 的完善啊。。。 uwsgi 协议我现在觉得不香了。因为是一个请求一个连接。。太费 tcp 了。。 |
![]() | 35 SjwNo1 2020-10-20 09:44:05 +08:00 gunicorn 方式部署好像不兼容一些 pyhton 的 socket 工具 |
36 andych3n 2020-10-20 11:12:15 +08:00 nginx + gunicorn |
37 macrosea 2020-11-09 23:32:37 +08:00 good comments, mark |
38 macrosea 2020-11-11 23:18:29 +08:00 flask + nginx + uwsgi 无法利用多核,uwsgi 配置: callable=app processes=4 threads=4 lazy-apps=true 哪位大佬 帮忙看看? |