扫码关注官方订阅号
学习tornado时,发现tornado的异步请求使用tornado.gen或者callback实现。做实验两个请求,一个sleep上5秒,一个立即返回。先请求sleep,再请求立即返回的。 发现django并没有做什么处理。同样可以在第一个请求sleep时,不影响第二个立即返回的请求。请问下django是怎么处理的。
小伙看你根骨奇佳,潜力无限,来学PHP伐。
你应该是使用了Django自己的开发服务器跑的例子,在Django关于manage.py的文档中写道:
--nothreading The development server is multithreaded by default. Use the --nothreading option to disable the use of threading in the development server.
也就是说,默认情况下你使用./manage.py runserver会开启多个线程对HTTP请求进行伺服,所以第二个请求进来时虽然第一个请求仍在sleep,但已经新开了一个线程进行响应处理,看起来像是“非阻塞”的工作模式,其实质是多线程而非单线程,想禁用这一行为也已经给出了答案,加上--nothreading参数:./manage.py runserver --nothreading即可。
./manage.py runserver
--nothreading
./manage.py runserver --nothreading
Django就没有用异步,通过线程来实现并发,这也是WSGI普遍的做法,跟tornado不是一个概念
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
你应该是使用了Django自己的开发服务器跑的例子,在Django关于manage.py的文档中写道:
也就是说,默认情况下你使用
./manage.py runserver会开启多个线程对HTTP请求进行伺服,所以第二个请求进来时虽然第一个请求仍在sleep,但已经新开了一个线程进行响应处理,看起来像是“非阻塞”的工作模式,其实质是多线程而非单线程,想禁用这一行为也已经给出了答案,加上--nothreading参数:./manage.py runserver --nothreading即可。Django就没有用异步,通过线程来实现并发,这也是WSGI普遍的做法,跟tornado不是一个概念