ASGI 与 WSGI、WSGI 兼容性问题

Dat*_*eks 1 django python-asyncio django-channels

在阅读 ASGI 规范时,我注意到WSGI 兼容性段落中的这句话:

\n
\n

WSGI 应用程序是同步的,必须在线程池中运行才能获得服务,但否则它们的运行时会映射到 HTTP 连接作用域\xe2\x80\x99s 生命周期。

\n
\n

我不明白为什么它必须在线程池中运行?

\n

use*_*342 5

我不明白为什么[WSGI应用程序]必须在线程池中运行?

在 ASGI 服务器内运行的 WSGI 应用程序必须在单独的线程中运行。如果要在事件循环线程中运行,单个 WSGI 应用程序将阻塞整个事件循环,包括服务器上运行的所有其他 ASGI 应用程序。原生 ASGI 应用程序不存在此问题,因为它们是异步的,因此设计为与其他协程和回调一起在事件循环内运行。

线程池只是一种优化:它缓存已经创建的线程,这样您就不需要为每个请求生成一个新线程。(它还提供了一次运行的最大线程数的上限,并对额外的请求进行排队。)