美文网首页
Django 默认启动的服务器是怎么同时响应多个请求的

Django 默认启动的服务器是怎么同时响应多个请求的

作者: 自我实验室_村君 | 来源:发表于2019-10-16 16:05 被阅读0次

进入 django 库的代码文件夹,搜索 "import socket"
看到

core/management/commands/runserver.py
import socket

一步步点进去看看

  • runserver.py
    • run()
      • inner_run()
        1. 打印 Django 启动时的基本信息, “Performing system checks...”, 系统版本之类信息
        2. handler = self.get_handler(*args, **options), 返回默认的 WSGI handler -> WSGIHandler 对象(core/handlers/wsgi.py)
        3. run(self.addr, int(self.port), handler, ipv6=self.use_ipv6, threading=threading, server_cls=self.server_cls)
          • server_cls 是 WSGIServer
          • 跳转到 basehttp.py -> run()
            • 如果多线程: httpd_cls = type('WSGIServer', (socketserver.ThreadingMixIn, server_cls), {})
            • 如果单线程 httpd_cls = server_cls, 直接 WSGIServer
            • httpd = httpd_cls(server_address, WSGIRequestHandler, ipv6=ipv6)
              • 最终是传入 addr,handler,创建一个 TCPServer() 对象,
            • httpd.serve_forever()
其实就是
  • 单线程: wsgiref/simple_server.py -> class WSGIServer -> TCPServer -> BaseServer -> process_request()
  • 多线程: socketserver.py -> ThreadingMixIn -> process_request()
    • 多线程中新开了线程来处理 process_request()
学到的一个用法

httpd_cls = type('WSGIServer', (socketserver.ThreadingMixIn, server_cls), {})
type('String', (), {}')socketserver.ThreadingMixIn, server_cls 为父类创建一个新的类型, 第一个参数是类名,第二个参数是父类,第三个参数是属性字典

相关文章

  • Django 默认启动的服务器是怎么同时响应多个请求的

    进入 django 库的代码文件夹,搜索 "import socket"看到 一步步点进去看看 runserver...

  • Channels概念

    Django的传统概念围绕着HTTP请求和响应展开:服务器收到一个请求,Django调起为其服务,生成响应并发送,...

  • Python socket 同时响应多个请求

    创建 socket 对象,监听地址 while True: serversocket.accept() 不断接收请...

  • 3.Redis 管道(Pipelining)

    一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最...

  • Django 常用命令

    Django 常用命令 新建项目: 新建APP : 启动项目: 说明:Django默认自带了一个web服务器,方便...

  • AFN的基本使用(序列化)

    问题描述 : 使用AFN发送网络请求时, 服务器返回的响应体responseObject默认是JSON数据,并且A...

  • 02--Django项目的MTV开发模式

    一、Django 处理 HTTP 请求 Web 应用的交互过程其实就是 HTTP 请求与响应的过程。Django ...

  • Django框架实现的基本原理

    1.简述django对http请求的执行流程 在接收一个http请求之前,启动uWsgi服务器的WSGI协议监听端...

  • django知识点五

    请求与响应 一、请求与响应 请求与响应过程 当用户请求一个页面时,Django 把请求的数据包装成一个 HttpR...

  • mysql分布式-分片篇

    需求分析 1,⽤户请求量太⼤, 会导致web应⽤⽆法及时响应 -> 分布式服务器(分散请求到多个服务器上) 2,单...

网友评论

      本文标题:Django 默认启动的服务器是怎么同时响应多个请求的

      本文链接:https://www.haomeiwen.com/subject/zxjumctx.html