小编mic*_*ols的帖子

如何在不触发异步上下文检查的情况下在 Jupyter Notebook 中使用 django 3.0 ORM?

Django 3.0 正在添加asgi/async 支持,并用它来保护在异步上下文中发出同步请求。同时,IPython 刚刚添加了顶级 async/await 支持,它似乎在默认事件循环内运行整个解释器会话。

不幸的是,这两个伟大的补充的结合意味着 jupyter notebook 中的任何 django ORM 操作都会导致SynchronousOnlyOperation异常:

SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
Run Code Online (Sandbox Code Playgroud)

正如异常消息所说,可以将每个 ORM 调用包装成sync_to_async()类似的形式:

SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
Run Code Online (Sandbox Code Playgroud)

但这不是很方便,特别是对于通常在属性查找时隐式解析的相关字段。

(我试过%autoawait off魔术,但它并没有在工作中,从快速浏览的文档,我假设这是因为ipykernels始终处于ASYNCIO循环中运行)

那么有没有办法在 django 中禁用异步上下文检查中的同步或在同步上下文中运行 ipykernel?


对于上下文:我编写了一个数据科学包,它使用 django 作为后端服务器,但还在 ORM 之上公开了一个基于 jupyter 的界面,允许您清理/注释数据、跟踪机器学习实验并在 jupyter notebook 中运行所有训练作业.

django ipython python-asyncio jupyter django-3.0

45
推荐指数
3
解决办法
7977
查看次数

标签 统计

django ×1

django-3.0 ×1

ipython ×1

jupyter ×1

python-asyncio ×1