Django(含DRF)是同步框架吗?为何多请求未串行执行?
问题解答
你的猜测方向是对的,但核心原因不是Django框架本身,而是Django运行依赖的Web服务器默认采用了多线程/多进程模式,具体解释如下:
- Django作为“同步框架”,指的是单个视图函数内部的代码是串行阻塞执行的——比如你的
my_view里的time.sleep(10)会占用当前处理该请求的线程/进程,直到任务完成才能返回响应。但这并不意味着整个服务只能处理一个请求。 - 你使用的默认开发服务器
runserver,在默认配置下是支持多线程的(Python 3.7+版本的Django,runserver默认启用多线程)。当你同时发起7个请求时,服务器会分配7个独立的线程分别处理每个请求,每个线程各自执行my_view里的逻辑,所以每个请求都只需要等待自己的10秒休眠时间,最终在10-12秒左右收到响应,而非串行等待70秒。 - 生产环境中使用的Web服务器(如Gunicorn、uWSGI)更是通过配置worker进程数、线程数来实现并发处理,本质也是通过多进程/多线程来同时响应多个请求。
简单来说:Django的视图是同步阻塞的,但Web服务器通过多worker(进程/线程)实现了并发请求处理,这就是你的实验结果的原因。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

