学习tornado时,发现tornado的异步请求使用tornado.gen或者callback实现。做实验两个请求,一个sleep上5秒,一个立即返回。先请求sleep,再请求立即返回的。 发现django并没有做什么处理。同样可以在第一个请求sleep时,不影响第二个立即返回的请求。请问下django是怎么处理的。
学习tornado时,发现tornado的异步请求使用tornado.gen或者callback实现。做实验两个请求,一个sleep上5秒,一个立即返回。先请求sleep,再请求立即返回的。 发现django并没有做什么处理。同样可以在第一个请求sleep时,不影响第二个立即返回的请求。请问下django是怎么处理的。
4 回答4.3k 阅读✓ 已解决
4 回答3.7k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.7k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
你应该是使用了Django自己的开发服务器跑的例子,在Django关于manage.py的文档中写道:
也就是说,默认情况下你使用
./manage.py runserver
会开启多个线程对HTTP请求进行伺服,所以第二个请求进来时虽然第一个请求仍在sleep,但已经新开了一个线程进行响应处理,看起来像是“非阻塞”的工作模式,其实质是多线程而非单线程,想禁用这一行为也已经给出了答案,加上--nothreading
参数:./manage.py runserver --nothreading
即可。