sync_to_async能否提升Django ORM查询的性能?
结论
你给出的单查询场景下,单个请求的处理速度不会有提升,甚至会因为sync_to_async的线程调度开销出现微小的性能下降。
具体原因
- Django ORM目前确实是纯同步实现,你用
sync_to_async包裹查询操作,本质只是把同步的查询逻辑丢到后台线程池执行,查询本身的耗时和同步视图里直接执行没有任何区别。 - 异步视图的性能优势体现在高并发场景下的服务整体吞吐量,而非单个请求的处理速度:
同步视图的执行模型是每个请求独占一个工作线程,当请求卡在数据库查询这类IO操作时,线程会被阻塞无法处理其他请求。而异步视图执行await操作时,当前协程会让出事件循环,空闲出来的算力可以用来处理其他请求的逻辑,同等硬件资源下可以承载更高的并发量。 - 如果你的业务并发量很低,工作线程永远不会被占满,那异步视图带来的调度开销反而会让整体性能不如同步视图。
- 只有当你的视图内存在多个独立的IO操作(比如同时查询两个无关联的数据库表、需要同时调用多个第三方接口)时,你可以把多个
sync_to_async任务并行执行,此时单个请求的总耗时才会低于同步视图的串行执行耗时。你给出的单查询示例不存在这种优化空间。
内容的提问来源于stack exchange,提问作者anisimovih
相关产品推荐
相关产品推荐

