GEvent¶
更喜欢使用 Gunicorn 或 uWSGI 使用GEvent工作者,而不是使用 gevent 直接去吧。Gunicorn和uWSGI提供了更具可配置性和经过生产测试的服务器。
gevent 允许编写看起来像标准同步Python的基于协程的异步代码。它使用 greenlet 启用任务切换而不写入 async/await
或使用 asyncio
。
事件小程序 是另一个做同样事情的库。您拥有的某些依赖项或其他考虑因素可能会影响您选择使用这两种方法中的哪一种。
GEvent提供了一个WSGI服务器,可以一次处理多个连接,而不是每个工作进程一个连接。您必须在自己的代码中实际使用GEvent,才能看到使用服务器的好处。
正在安装¶
使用GEvent时,greenlet>=1.0是必需的,否则上下文局部变量,如 request
将不会像预期的那样工作。使用PyPy时,需要使用>=7.3.7的PyPy。
创建一个Virtualenv,安装应用程序,然后安装 gevent
。
$ cd hello-app
$ python -m venv .venv
$ . .venv/bin/activate
$ pip install . # install your application
$ pip install gevent
正在运行¶
若要使用GEvent为您的应用程序提供服务,请编写一个脚本来导入其 WSGIServer
,以及您的应用程序或应用程序工厂。
wsgi.py
¶from gevent.pywsgi import WSGIServer
from hello import create_app
app = create_app()
http_server = WSGIServer(("127.0.0.1", 8000), app)
http_server.serve_forever()
$ python wsgi.py
服务器启动时不显示任何输出。
对外约束¶
不应以超级用户身份运行GEvent,因为这会导致应用程序代码以超级用户身份运行,这是不安全的。但是,这意味着无法绑定到端口80或443。相反,像这样的反向代理 恩吉克斯 或 ApacheHTTPD 应在GEVENT前面使用。
您可以使用以下命令绑定到非特权端口上的所有外部IP 0.0.0.0
在上一节所示的服务器参数中。在使用反向代理设置时不要执行此操作,否则可能会绕过代理。
0.0.0.0
不是有效的导航地址,则需要在浏览器中使用特定的IP地址。