Django本身是同步的。在
每个HTTP请求将完全同步处理。在
但是,您有一些扩展,如django channels(https://github.com/django/channels),它们是异步的,用于web套接字/等等
这有点过于简单化了:但是同步编程是指如果您编写代码,从头到尾处理一个HTTP请求,并在线程或进程中执行,如果一个进程/一个线程一次只处理一个请求。在
对于python,特别是asyncio或twisted,可以编写这样的代码:一个进程/线程可以处理多个请求。等待一个新的数据块在网络上等待另一个数据块被发送出去。在
Django不使用twisted或asyncio。在
然而,新的web服务器web应用程序不仅可以处理http请求,还可以使用web套接字。django channels模块是为处理web套接字而构建的。它是用asyncio实现的,它只允许用一个进程处理多个web套接字。它将通过消息与django的同步部分进行交互(例如redis)
附录:正如@Sayse指出的,django3.0将支持异步代码。
然而:
只有在我理解的情况下,ORM操作仍然是同步的。它们将在异步事件循环中失败,并出现SynchronousOnlyOperation异常。因此,可能大多数真正的django视图都会失败,因为django的原因之一是使用ORM作为数据库访问.sections在