带事件控件的Flask-SocketIO:Web和Websockets线程

时间:2019-08-23 02:28:45

标签: python flask flask-restful flask-socketio eventlet

我的设置是flask-socketio,带有一个烧瓶稳定的Web服务器。

已安装Eventlet,因此在生产模式下将使用eventlet Web服务器。

我了解flask-socketio和eventlet Web服务器本身都是基于事件循环的。

flask-socketio和eventlet Web服务器是在同一eventloop(同一线程)还是在两个不同的线程中运行?

1 个答案:

答案 0 :(得分:1)

我认为您对术语感到困惑。

事件循环是任务计划程序。这是由eventlet提供的,并且单个事件循环用于整个应用程序,包括Flask和Flask-SocketIO部分。

每次请求到达eventlet Web服务器时,它将为其分配一个新任务。因此,基本上每个请求(无论是Flask还是Flask-SocketIO,HTTP或WebSocket)都会得到自己的任务。在处理请求时,任务会不断创建和销毁。

使用eventlet时,任务不是线程,它们是greenlet,这就是为什么我避免在上面将它们称为线程并使用更通用的“任务”一词的原因。它们在许多方面的行为都类似于线程,但事实并非如此。