Django 3.0はasgi / asyncのサポートを追加しており、非同期コンテキストで同期リクエストを行うことを防いでいます。同時に、IPythonは最上位の非同期/待機サポートを追加しました。これは、デフォルトのイベントループ内でインタープリターセッション全体を実行しているようです。
残念ながら、これら2つの優れた追加の組み合わせは、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
魔法を試しましたが、それは機能しませんでした、私が想定しているドキュメントを一目見ただけで、それはipykernelが常に非同期ループで実行されるためです)
それで、djangoの非同期コンテキストチェックで同期を無効にするか、同期コンテキストでipykernelを実行する方法はありますか?
コンテキスト:私はdjangoをバックエンドサーバーとして使用するデータサイエンスパッケージを作成しましたが、ORMの上にjupyterベースのインターフェイスを公開し、データのクリーンアップ/注釈付け、機械学習実験の追跡、トレーニングジョブの実行をすべてjupyterノートブックで実行できるようにしました。
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
ですか。私はjupyterの内部を試し、settings.pyにも追加しました。それでも、私のjupyterでエラーが発生しています