WSGI与ASGI下django线程执行情况

wsgi、asgi

  • wsgi:web服务网关接口,用来描述Web 服务器(如Nginx, Apache)如何与Web 应用(Flask, Django)通信的规范。不支持WebSocket
  • asgi:异步服务网关接口,也是wsgi的扩展,可处理多种通用的协议类型,包括HTTP,HTTP2和WebSocket

一、wsgi模式下的django

1.1、单线程nothreading模式

python manage run server 0.0.0.0:8000 --nothreading

名称 样例 功能
main线程 <_MainThread(MainThread, started thread_id)> django启动
任务线程 处理任务

注:请求处理均交由任务线程执行。由于只有一个线程,如果遇到并发请求,会排队处理,与此同时,相应的响应会阻塞变慢。

1.2、多线程模式(默认)

python manage run server 0.0.0.0:8000

名称 样例 功能
main线程 <_MainThread(MainThread, started thread_id)> django启动
守护线程 守护监听任务线程状态
任务线程 处理任务

注:请求处理均交由任务线程执行。如遇并发情况①线程状态空闲,执行请求②请求阻塞,将另起新任务线程执行,存活至main线程结束。

二、asgi模式下的django

2.1、单线程nothreading模式

python manage run server 0.0.0.0:8000 --nothreading

名称 样例 功能
main线程 <_MainThread(MainThread, started thread_id)> 既项目启动又兼处理ws协议任务
池子线程 ] 处理http、https等协议任务

注:无论是main线程还是池子线程在并发情况下,均为顺序执行,即极有可能会遭遇阻塞情况

2.2、多线程模式(默认)

python manage run server 0.0.0.0:8000

名称 样例 功能
main线程 <_MainThread(MainThread, started thread_id)> 项目启动
池子线程 ] 处理http、https等协议任务
WS线程 处理WebSocket协议任务
消息监听线程 处理ws消息时,开启一个线程监听消息是否来到(只监听消息状态,不处理消息,处理消息交由WS线程

注:

  • 池子线程、ws线程均为顺序执行,会遭遇阻塞
  • 消息监听线程:由asyncio_0可知,这是一个组,可以再有asyncio_1,asyncio_2,asyncio_3等等。触发1、2、3。。。的条件暂未找到

三、结束!

你可能感兴趣的:(概念,web后端,django,后端)