我需要转换一些 Django View 以使用查询数据源的异步函数。我遇到了很大的性能问题,因为这些查询是一个接一个地执行的。然而,这项任务比预期的要困难得多。
我在下面指出了问题的根源。我也遇到了其他问题,但是,这是迄今为止我不知道该怎么做的问题。我在以下代码中指示的位置收到以下错误:
django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async
model2 是指向另一个模型的 ForeignKey 属性。
在 sync_to_async() 中包装 model1.model2 不起作用。
知道如何让它工作吗?
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()
最佳答案
这对我有用:
model2 = await sync_to_async(lambda: model1.model2)()
之后 model1 也包含引用。
关于python - 从同步 View 调用的异步函数中的 Django 模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70295445/