从3.1版本(目前为beta版)开始,Django已经支持异步视图。
async def myview(request):
users = User.objects.all()
这个例子无法正常工作——因为ORM还不具备异步准备就绪的能力。
那么当前的解决方法是什么?
你不能只使用sync_to_async与queryset,因为它们尚未被运行评估:
from asgiref.sync import sync_to_async
async def myview(request):
users = await sync_to_async(User.objects.all)()
所以唯一的方法是在sync_to_async中评估queryset:
async def myview(request):
users = await sync_to_async(lambda: list(User.objects.all()))()
这看起来非常丑陋。
你有没有想过如何让它更好看?
await sync_to_async(list)(User.objects.all())
- user5510840