【问题标题】:Does sync_to_async improve performance of django ORM queries?sync_to_async 是否提高了 django ORM 查询的性能?
【发布时间】:2021-11-22 18:19:12
【问题描述】:

我想这是一个非常简单的问题,但是在阅读了很多文档和提示后,我仍然不明白这一点。

除了中间件和 SGI 类型等所有外部事物,如果我的视图仅包含数据库查询和用于处理接收到的数据的同步代码,将使用 async defsync_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())
    ...

【问题讨论】:

    标签: python django performance async-await orm


    【解决方案1】:

    async/await(通常也是一个概念)不会为该特定请求提供更好的性能。它的作用是释放主执行进程来执行其他代码,只有在操作完成后才返回。

    主要有两种情况可以提高性能:

    • 在(预期的)单线程语言(如 Python、JS、Ruby 等)的情况下。应用程序服务器每秒可以运行多个请求,因为它不会等待外部调用(DB、API ......)而什么都不做.
    • 如果您的代码需要执行多个独立调用,那么其中一个不会等待另一个。例如,您要创建 20 个项目,但可用的 API 仅针对每个项目,因此您可以使用 async 一次触发全部 20 个,而不是一个一个地触发

    【讨论】:

    • 也就是说,我正确地假设,虽然 Django ORM 仍然是同步的,但重新处理简单视图(仅包括对数据库的查询并返回接收到的数据作为响应)是没有意义的异步定义?
    猜你喜欢
    • 2017-04-12
    • 2012-01-28
    • 2017-11-23
    • 2017-01-17
    • 2019-12-29
    • 2013-08-03
    • 2020-04-25
    • 2012-10-30
    相关资源
    最近更新 更多