Django是同步还是异步?

SUM*_*MAR 0 python django backend web-development-server server

Django是同步还是异步?
我想知道Django框架是同步的还是异步的。我听说过他们询问您使用的框架是同步还是异步的面试问题。因此,我想了解Web开发方面“ 同步”和“异步”的含义。

gel*_*ida 6

Django本身是同步的。

每个HTTP请求将完全同步处理。

但是,您有django-channels(https://github.com/django/channels)之类的扩展名,这些扩展名是异步的,旨在用于Web套接字/等。

有点简化了:但是,如果您编写代码,则同步编程就是这样,它从头到尾处理一个HTTP请求,并且在一个线程或一个进程中执行,并且一个进程/一个线程一次仅处理一个请求。

使用python尤其是asyncio或扭曲的python可以编写这样的代码,即一个进程/线程可以处理多个请求。每当一个请求等待网络上的新数据被接收或等待发送大量数据时,它就可以处理另一个请求,直到该其他请求等待网络准备就绪为止。

Django不使用twisted或asyncio。

但是,新的Web服务器Web应用程序不仅可以处理http请求,还可以使用Web套接字。django通道模块用于处理Web套接字。它由asyncio实现,它仅允许通过一个进程处理许多Web套接字。它将通过消息(例如redis)与Django的同步部分进行交互

附录:@Sayse指出django 3.0将支持异步代码。但是:仅在我理解的情况下,ORM操作仍将是同步的。它们将在带有SynchronousOnlyOperation异常的异步事件循环中失败。因此,大多数真实的django视图可能会失败,因为django的原因之一是使用ORM进行数据库访问。

  • django 3.0 将支持 [asgi](https://docs.djangoproject.com/en/dev/releases/3.0/#asgi-support) (2认同)