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