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启动 | 任务线程 | <Thread(django-main-thread, started daemon thread_id)> | 处理任务 |
注:请求处理均交由任务线程执行。由于只有一个线程,如果遇到并发请求,会排队处理,与此同时,相应的响应会阻塞变慢。
1.2、多线程模式(默认)
python manage run server 0.0.0.0:8000
名称 | 样例 | 功能 |
---|
main线程 | <_MainThread(MainThread, started thread_id)> | django启动 | 守护线程 | <Thread(django-main-thread, started daemon thread_id)> | 守护监听任务线程状态 | 任务线程 | <Thread(Thread-1, started daemon thread_id)> | 处理任务 |
注:请求处理均交由任务线程执行。如遇并发情况①线程状态空闲,执行请求②请求阻塞,将另起新任务线程执行,存活至main线程结束。
二、asgi模式下的django
2.1、单线程nothreading模式
python manage run server 0.0.0.0:8000 --nothreading
名称 | 样例 | 功能 |
---|
main线程 | <_MainThread(MainThread, started thread_id)> | 既项目启动又兼处理ws协议任务 | 池子线程 | <Thread(ThreadPoolExecutor-0_0, started thread_id)>] | 处理http、https等协议任务 |
注:无论是main线程还是池子线程在并发情况下,均为顺序执行,即极有可能会遭遇阻塞情况
2.2、多线程模式(默认)
python manage run server 0.0.0.0:8000
名称 | 样例 | 功能 |
---|
main线程 | <_MainThread(MainThread, started thread_id)> | 项目启动 | 池子线程 | <Thread(ThreadPoolExecutor-0_0, started thread_id)>] | 处理http、https等协议任务 | WS线程 | <Thread(django-main-thread, started daemon thread_id)> | 处理WebSocket协议任务 | 补充线程 | <Thread(asyncio_0, started thread_id)> | 偶然发生,暂无定位原因,也不知此线程作用 |
注:
- 池子线程、ws线程均为顺序执行,会遭遇阻塞
- 补充线程 场景:并发情况下,nginx转发websocket接口请求。接口遇到阻塞,访问结束后,发现多出补充线程。
三、结束!
|