从同步视图调用的异步函数中的 Django 模型属性

ced*_*eds 4 python django asynchronous

我需要转换一些 Django 视图以使用查询数据源的异步函数。我遇到了很大的性能问题,因为这些查询是逐个执行的。然而,任务比预想的要困难得多。

我在下面指出了问题的根源。我也遇到了其他问题,但是,这是迄今为止我不知道该怎么做的问题。我收到以下代码中所示的错误:

django.core.exceptions.SynchronousOnlyOperation:您不能从异步上下文中调用它 - 使用线程或sync_to_async

model2 是指向另一个模型的ForeignKey 属性。

将 model1.model2 包装在sync_to_async() 内不起作用。

知道如何进行这项工作吗?

async def queryFunctionAsync(param1, param2, loop):
   model1 = await sync_to_async(Model1.objects.get)(pk=param1)
   model2 = model1.model2 # This is where the error is generated

def exampleView(request):
   loop = asyncio.new_event_loop()
   asyncio.set_event_loop(loop)
   data = async_to_sync(queryFunctionAsync)(param1, param2, loop)
   loop.close()
Run Code Online (Sandbox Code Playgroud)

Rol*_*ana 5

这对我有用:

model2 = await sync_to_async(lambda: model1.model2)()
Run Code Online (Sandbox Code Playgroud)

之后 model1 也包含引用。