【问题标题】:What's the difference between handling requests in Django 3 ASGI mode vs WSGI mode?在 Django 3 ASGI 模式和 WSGI 模式下处理请求有什么区别?
【发布时间】:2020-02-16 03:14:27
【问题描述】:

Django 3 应该很快就会发布,它将能够在 ASGI 模式下工作。 ASGI 模式似乎使 Django 在处理请求时比在 WSGI 模式下更高效(如果我相信正确的话,每个时间单位可以处理更多请求)。它是如何实现的?是不是 Django 可以同时处理多个请求,但它们中的大多数会等待诸如从数据库中获取数据或其他 IO 操作之类的事件?

【问题讨论】:

    标签: python django asgi


    【解决方案1】:

    主要区别在于同步与异步的性质。 同步代码在不同的线程或进程中运行并返回响应时被阻塞。做其他事情没有触发方法。

    异步编程允许在事件循环中推送一段代码。在它执行之前做一些其他的事情,然后在完成后用它做一些事情。这是非阻塞和基于事件的方法。

    来自docs

    WSGI 出了什么问题?

    您可能会问“为什么不升级 WSGI”?很多人都问过这个问题 多年来,问题通常最终是 WSGI 的单一可调用接口不适合更多人参与 WebSocket 等网络协议。

    WSGI 应用程序是一个单一的、同步的可调用对象,它需要一个 请求并返回响应;这不允许长寿 连接,就像您使用长轮询 HTTP 或 WebSocket 获得的 连接。

    即使我们使这个可调用异步,它仍然只有一个 提供请求的路径,因此具有多个传入的协议 事件(如接收 WebSocket 帧)无法触发。

    ASGI 是如何工作的?

    ASGI 被构造为单个异步可调用对象。它需要范围, 其中包含有关传入请求、发送、等待的详细信息 这使您可以向客户端发送事件并接收等待的 这使您可以从客户端接收事件。

    这不仅允许多个传入事件和传出事件 每个应用程序,还允许一个后台协程,所以 应用程序可以做其他事情(例如在 外部触发器,例如 Redis 队列)。

    【讨论】:

      【解决方案2】:

      你说的情况是因为你在请求的整个过程中没有使用异步,因为在使用异步方式的情况下,你必须保证每个环节都使用异步,这样你的请求才不会阻塞在At某个阶段,可以保证Django异步模式同时可以处理更多的请求

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        • 2020-07-24
        • 2010-10-02
        • 2011-05-13
        • 2022-12-10
        相关资源
        最近更新 更多