2

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

4

2 回答 2

1

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

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

文档

WSGI 有什么问题?

你可能会问“为什么不升级 WSGI”?多年来,这个问题已经被问过很多次,问题通常最终是 WSGI 的单一可调用接口不适合 WebSocket 等更多涉及的 Web 协议。

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

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

ASGI 是如何工作的?

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

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

于 2019-10-19T10:16:49.927 回答
0

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

于 2019-12-04T05:24:55.017 回答