python - 从同步 View 调用的异步函数中的 Django 模型属性

标签 python django asynchronous

我需要转换一些 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/

相关文章:

python - 如何使用 argmin 的输出作为 Numpy 的索引

python - Django 图像表单不保存图像

python - 使用 twython 在 django 本地服务器上测试 twitter 应用程序

python - Django - 将模板上下文传递给表单

javascript - 捕获两个并行运行的异步函数都执行完毕的时刻

python - 如何执行随机命令行并重现该过程?

Python 列表索引拆分和操作

python - 在 Pillow 中打开和加载图像时出现 "Too many open files"错误

typescript - 错误 TS1243 : 'async' modifier cannot be used with 'abstract' modifier

multithreading - 如何在nodejs中创建线程