Django 3.0은 asgi / async 지원 기능을 추가 하고 비동기식 컨텍스트에서 동기식 요청을하는 것을 막고 있습니다. 동시에 IPython은 최상위 이벤트 async / await support를 추가 하여 기본 이벤트 루프 내에서 전체 인터프리터 세션을 실행하는 것으로 보입니다.
불행히도이 두 가지 추가 기능의 조합은 jupyter 노트북에서 장고 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는 오류가 발생합니다