我的设置是flask-socketio,带有一个烧瓶稳定的Web服务器。
已安装Eventlet,因此在生产模式下将使用eventlet Web服务器。
我了解flask-socketio和eventlet Web服务器本身都是基于事件循环的。
flask-socketio和eventlet Web服务器是在同一eventloop(同一线程)还是在两个不同的线程中运行?
答案 0 :(得分:1)
我认为您对术语感到困惑。
事件循环是任务计划程序。这是由eventlet提供的,并且单个事件循环用于整个应用程序,包括Flask和Flask-SocketIO部分。
每次请求到达eventlet Web服务器时,它将为其分配一个新任务。因此,基本上每个请求(无论是Flask还是Flask-SocketIO,HTTP或WebSocket)都会得到自己的任务。在处理请求时,任务会不断创建和销毁。
使用eventlet时,任务不是线程,它们是greenlet,这就是为什么我避免在上面将它们称为线程并使用更通用的“任务”一词的原因。它们在许多方面的行为都类似于线程,但事实并非如此。