python - 新手求教:django的异步请求非阻塞是怎么实现的?
伊谢尔伦
伊谢尔伦 2017-04-17 14:35:38
[Python讨论组]

学习tornado时,发现tornado的异步请求使用tornado.gen或者callback实现。做实验两个请求,一个sleep上5秒,一个立即返回。先请求sleep,再请求立即返回的。 发现django并没有做什么处理。同样可以在第一个请求sleep时,不影响第二个立即返回的请求。请问下django是怎么处理的。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
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即可。

ringa_lee

Django就没有用异步,通过线程来实现并发,这也是WSGI普遍的做法,跟tornado不是一个概念

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号