Django 3.0增加了asgi / async支持,并提供了在异步上下文中发出同步请求的保护措施。同时,IPython刚刚添加了顶级的async / await支持,它似乎在默认事件循环内运行整个解释器会话。
不幸的是,这两个大加法的结合意味着jupyter笔记本中的任何django ORM操作都会导致SynchronousOnlyOperation
异常:
SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
如异常消息所述,可以将每个ORM调用包装为以下形式sync_to_async()
:
images = await sync_to_async(Image.objects.all)()
但这不是很方便,特别是对于通常在属性查找中隐式解析的相关字段。
(我尝试了%autoawait off
魔术,但没有用,从快速浏览一下我假设的文档开始是因为ipykernels始终在asyncio循环中运行)
那么有没有办法在Django中禁用异步上下文检查中的同步或在同步上下文中运行ipykernel?
对于上下文:我编写了一个数据科学软件包,该软件包使用django作为后端服务器,但还在ORM上公开了基于jupyter的界面,该界面允许您在jupyter笔记本中清理/注释数据,跟踪机器学习实验并运行培训作业。
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
。我在jupyter内部尝试过,还添加到settings.py中。但是我的jupyter还是在给错误