Jupyter: Django: SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async

このエラーは、asyncコンテキストから同期的なコードを呼び出そうとした場合に発生するエラーです。

async-unsafeなコードを呼び出す場合は、asyncコンテキストからではなく、自分自身の同期関数で書き、それをasgiref.sync.syncを使用して呼び出すように修正する必要があります¹。

¹: Django: SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async. - Stack Overflow

ソース: Bing との会話 2023/5/4

DJANGO_ALLOW_ASYNC_UNSAFE 環境変数を使用することで、非同期コンテキストで SynchronousOnlyOperation エラーが発生した場合に警告を無効にすることができます¹。

ただし、このオプションを有効にすると、Django の非同期で安全でない部分への同時アクセスがある場合、データの損失や破損が発生する可能性があるため、開発環境で一時的に動作確認する以外の用途では使用しないようにしてください²。

¹: Django - Asynchronous support | Runebook (ルーンブック) ²: Django非同期View入門 | gihyo.jp

ソース: Bing との会話 2023/5/4

対応

1
2
import os
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"

あるいは .env で設定