带有 eventlet 的 Flask-SocketIO:Web 和 Websockets 线程
Flask-SocketIO with eventlet: Web and Websockets Thread
我的设置是带有 flask-restful 网络服务器的 flask-socketio。
安装了Eventlet,所以在生产模式下,使用eventlet webserver。
我了解 flask-socketio 和 eventlet 网络服务器本身是基于事件循环的。
flask-socketio 和 eventlet webserver 是在同一个事件循环(同一个线程)上运行还是在两个不同的线程中运行?
我认为您混淆了术语。
事件循环是任务调度器。这是由 eventlet 提供的,单个事件循环用于整个应用程序,包括 Flask 和 Flask-SocketIO 部分。
每次请求到达 eventlet 网络服务器时,它都会为其分配一个新任务。所以基本上每个请求(无论是 Flask 还是 Flask-SocketIO,HTTP 或 WebSocket)都会有自己的任务。随着请求的处理,任务不断被创建和销毁。
当您使用 eventlet 时,任务不是线程,它们是 greenlet,这就是为什么我避免在上面称它们为线程并使用更通用的 "task" 术语。它们在很多方面表现得像线程,但又不是。
我的设置是带有 flask-restful 网络服务器的 flask-socketio。
安装了Eventlet,所以在生产模式下,使用eventlet webserver。
我了解 flask-socketio 和 eventlet 网络服务器本身是基于事件循环的。
flask-socketio 和 eventlet webserver 是在同一个事件循环(同一个线程)上运行还是在两个不同的线程中运行?
我认为您混淆了术语。
事件循环是任务调度器。这是由 eventlet 提供的,单个事件循环用于整个应用程序,包括 Flask 和 Flask-SocketIO 部分。
每次请求到达 eventlet 网络服务器时,它都会为其分配一个新任务。所以基本上每个请求(无论是 Flask 还是 Flask-SocketIO,HTTP 或 WebSocket)都会有自己的任务。随着请求的处理,任务不断被创建和销毁。
当您使用 eventlet 时,任务不是线程,它们是 greenlet,这就是为什么我避免在上面称它们为线程并使用更通用的 "task" 术语。它们在很多方面表现得像线程,但又不是。