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を使用して呼び出すように修正する必要があります¹。
ソース: Bing との会話 2023/5/4
- (1) Django: SynchronousOnlyOperation: You cannot call this …. https://stackoverflow.com/questions/61926359/django-synchronousonlyoperation-you-cannot-call-this-from-an-async-context-u.
- (2) django.core.exceptions.SynchronousOnlyOperation after …. https://github.com/django/channels/issues/1464.
- (3) python - Django channels Async Websocket throwing Error …. https://stackoverflow.com/questions/63892884/django-channels-async-websocket-throwing-error-while-trying-to-use-database-quer.
- (4) Django channel occasionally gets error “cannot call this from …. https://stackoverflow.com/questions/69239657/django-channel-occasionally-gets-error-cannot-call-this-from-an-async-context.
- (5) python - Getting SynchronousOnlyOperation error Even after …. https://stackoverflow.com/questions/63149616/getting-synchronousonlyoperation-error-even-after-using-sync-to-async-in-django.
DJANGO_ALLOW_ASYNC_UNSAFE 環境変数を使用することで、非同期コンテキストで SynchronousOnlyOperation エラーが発生した場合に警告を無効にすることができます¹。
ただし、このオプションを有効にすると、Django の非同期で安全でない部分への同時アクセスがある場合、データの損失や破損が発生する可能性があるため、開発環境で一時的に動作確認する以外の用途では使用しないようにしてください²。
¹: Django - Asynchronous support | Runebook (ルーンブック) ²: Django非同期View入門 | gihyo.jp
ソース: Bing との会話 2023/5/4
- (1) Django - Asynchronous support Django は非同期ビューを書く …. https://runebook.dev/ja/docs/django/topics/async.
- (2) Django非同期View入門 | gihyo.jp. https://gihyo.jp/article/2022/08/monthly-python-2208.
- (3) 非同期サポート | Django ドキュメント | Django. https://docs.djangoproject.com/ja/4.2/topics/async/.
- (4) 【解決】JupyterLabからデータを生成しようとすると …. https://fclout.hateblo.jp/entry/2020/04/26/%E3%80%90%E8%A7%A3%E6%B1%BA%E3%80%91JupyterLab%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E7%94%9F%E6%88%90%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8SynchronousOnlyOperation.
対応
| |
あるいは .env で設定