非同期コンテキストチェックをトリガーせずに、Jupyter Notebookでdjango 3.0 ORMを使用する方法
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ノートブックで実行できるようにしました。