我想这是一个非常简单的问题,但是在阅读了大量文档和技巧之后,我仍然不明白这一点。
除了所有外部的东西,如中间件和SGI类型,如果我的视图只包含一个数据库查询和同步代码与接收到的数据工作,将使用async def
和sync_to_async
ORM查询给我任何性能提升?因为目前,ORM查询仍然是同步的。
async def myview(request):
users = await sync_to_async(list)(User.objects.all())
...
和
def myview(request):
users = list(User.objects.all())
...
async/await
(一般作为一个概念也是如此)不能为特定的请求提供更好的性能。它的作用是释放主执行进程来执行其他代码,只有在操作完成后才返回到主执行进程。
可以提高性能的主要有两种情况:
- 在单线程语言的情况下,如Python, JS, Ruby等。应用服务器可以每秒运行多个请求,因为它不需要等待外部调用(DB, api…)而不做任何事情。
- ,以防您的代码需要执行多个独立调用,因此一个不等待另一个。例如,您想创建20个项目,但API只能用于每个项目,因此您可以使用
async
一次触发所有20个项目,而不是一个接一个