django是单线程还是多线程,Django多线程

  django是单线程还是多线程,Django多线程

  目录django多线程#1环境#2 Django原生单线程#3 Django服务器默认多线程#3.1测试#4用uWSGI服务器启动django#4.1启动uWSGI#4.2向uWSGI添加进程#5总结Django # 4.1的多线程问题

  Django多线程#1环境Python 3 . 7 . 3 Django==2 . 0 . 7 uws gi==2 . 0 . 18 # 2 Django原生单线程#1

  Django是一个原生的单行程序。当第一个请求没有完成时,第二个请求将被阻塞。在第一个请求完成之前,不会执行第二个请求。

  #2 Django不使用异步,而是通过线程实现并发,这也是WSGI的普遍做法,和tornado不是一个概念。

  #3 django服务器默认多线程官方文档解释django自己的服务器默认是多线程的。

  【外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-nmynqj 4-1591867681155)(3359 raw . githubusercontent . com/coxhuang/yosoro/master/20190507225848-image . png)]

  #3.1测试python 3 manage . py RunServer 0 . 0 . 0:8000 Django有两个接口,第一个接口是sleep(20),另一个接口没有延迟(需要几毫秒)

  先请求第一个接口,再请求第二个接口,第二个接口返回数据,20秒后第一个接口返回数据。

  证明django的服务器是默认多线程的

  3 python manager . py runserver 0 . 0 . 0:8000-无线程重复上述步骤。

  【外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-umj 9 iyfh-1591867681157)(3359 raw . githubusercontent . com/coxhuang/yo Soro/master/20190507230747-image . png)]

  #4用uWSGI服务器启动django # 4.1在django项目目录下启动uWSGI #,演示项目名称uWSGI-http 0 . 0 . 0:8000-file Demo/wsgi . py经过以上步骤,发现在这种情况下启动Django项目时,uw SGI也是单线程,访问接口需要排队。

  没有进程被添加到uWSGI。uWSGI默认为单进程单线程。

  #4.2将进程数添加到uw SGI uw SGI-http 0 . 0 . 0:8000-file demo/wsgi . py-processes 4-Threads 2 #进程:进程数与workers # threads:每个进程打开的线程数已经过测试,可以‘同时’访问接口

  【外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-DPNUMPNA-1591867681159)(3359 raw . githubusercontent . com/coxhuang/yosoro/master/20190507233529-image . png)]

  【外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-LBJZBUV-1591867681160)(3359 raw . githubusercontent . com/coxhuang/yosoro/master/20190507233629-image . png)]

  #5总结一下关于django python的多线程问题。由于GIL的存在,一个进程只允许一个线程工作,这就使得单进程多线程无法发挥多核多进程的优势。线程之间没有GIL抢占,每个进程都有自己的线程锁。多进程多GIL单进程多线程Python应用可以实现并发。但是,在没有并行多进程的多处理器python应用程序中,可能存在并行性。至于并发还是并行,由操作系统决定。如果分配单个处理器处理多个进程,那么它是并行的,如果分配给多个处理器,那么它是并行的。Nginx uWSGI可以在python中实现高并发。

django是单线程还是多线程,Django多线程