【发布时间】:2019-12-20 08:45:31
【问题描述】:
由于 django 3.0 支持异步,我想知道数据库查询会发生什么。我在the official documentation 中没有看到任何更新,我确信语法是这样的:
b5.name = 'New name'
b5.save()
将完全阻塞当前线程,哪个事件循环正在运行它。如果数据库在 20 秒内返回响应,则在此期间不会处理任何其他请求。
另一件让我想知道的事情:async 只使用 1 个线程(如果我们至少不在线程执行器中等待事情)。事实是:atomic(数据库)请求绑定到数据库的连接,该连接绑定到线程局部变量。这意味着所有请求都将在单个线程中运行 = 所有请求都将具有相同的事务。
【问题讨论】:
-
通常请求由不同的线程处理,因此据我所知,它已经是异步的每个请求。
-
那么asgi 有什么意义呢?它与 django 2.0 有何不同?如果我将 django 2.0 与 py 3.5+ 一起使用,我仍然可以在视图中使用 await
-
Django 3.0 引用了“正在开发对异步 Python 的支持”,但还远远没有准备好。见docs.djangoproject.com/en/3.0/topics/async
标签: django python-asyncio django-3.0