看到 demo 里在程序入口直接设置了 gevent monkey patch,对 gevent 不是很熟悉(猜测使用 gevent 是为了使 app 可以处理延迟比较高的访问,不是强依赖的,与 web server 无必然联系)。有什么办法能把并发处理能力类比于 gunicorn 的 worker 数量吗?

写了一个应用,现在部署会报错,不知道和没有使用 gevent 是否有关

[2020-04-12T17:59:54.271Z][system] 开始构建 20200413-015954
[2020-04-12T17:59:54.298Z][system] 正在克隆应用代码 ...
[2020-04-12T17:59:59.015Z][system] [Git] master: try to fix deploy error by enable engine middleware
[2020-04-12T17:59:59.204Z][system] 运行环境:python
[2020-04-12T17:59:59.229Z][system] 正在下载和安装依赖项 ...
[2020-04-12T18:00:54.785Z][system] 存储镜像到仓库(9.75MB)...
[2020-04-12T18:00:56.782Z][system] 版本 20200413-015954 构建完成
[2020-04-12T18:00:56.806Z][system] 开始部署 20200413-015954 到 web1
[2020-04-12T18:00:56.848Z][system] 正在创建新实例 ...
[2020-04-12T18:00:57.551Z][system] [Python] 使用 Python k.0, Python SDK 2.5.1
[2020-04-12T18:01:00.773Z][system] 正在启动新实例 ...
[2020-04-12T18:01:02.814Z][system] 实例启动成功:Redirecting...
[2020-04-12T18:01:02.845Z][system] 正在更新云函数信息 ...
[2020-04-12T18:01:02.859919979Z][instance:web1] <gevent._socket3.socket object, fd=7, family=10, type=1, proto=0>: Expected GET method: "\x16\x03\x01\x00ø\x01\x00\x00ô\x03\x03&¦»\x9cÏ\x11\x14A\x1aÝÚ(÷TîfY\x87{µWxV\xa0Kj=C¥Åý¦\x00\x00nÀ/À+À0À,\x00\x9eÀ'\x00gÀ(\x00kÀ$À\x14À\n"
[2020-04-12T18:01:02.868Z][system] 部署失败:获取云函数信息失败:: Error: write EPROTO 140626355545920:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:827:

部署报错之前我们在工单里交流过,是因为不将云函数的路由交给 SDK 处理但是启用了 SDK 的 https 重定向插件的时候,云引擎的健康检查( /1.1/functions/_ops/metadatas 会失败)。

猜测使用 gevent 是为了使 app 可以处理延迟比较高的访问,不是强依赖的,与 web server 无必然联系

是的,gevent 在有大量 I/O 操作(包括访问 LeanCloud 后端)时性能比较好。 Gunicorn 可以搭配包括 gevent 在内的多种 worker 使用,具体我们没有做过评测。

云引擎是使用 gevent.pywsgi 作为 WSGI server 服务的,具体可以参看 demo 项目的代码

云引擎线上的配置基本上差不多的(当然没有加上本地调试用的 run_with_reloader)。

感谢反馈问题,把 SDK 的重定向中间件改了下,现在已经支持不将云函数的路由交给 SDK 处理的情况(还在 master 分支上,将随下次 SDK 发布新版本一起发布)。

更新:>= 2.6.1 的 SDK 已支持这一特性。