Django 3.0, asgi / async desteği ekliyor ve bununla birlikte bir async bağlamında senkronize istekleri yapmak için bir güvenlik görevlisi . Eşzamanlı olarak, IPython , tüm yorumlayıcı oturumunu varsayılan bir olay döngüsü içinde çalıştırıyor gibi görünen en üst düzey asenkron / bekliyor desteğini ekledi .
Ne yazık ki bu iki büyük eklemenin birleşimi, bir jupyter dizüstü bilgisayardaki herhangi bir django ORM işleminin bir istisnaya neden olduğu anlamına gelir SynchronousOnlyOperation
:
SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
İstisna mesajında belirtildiği gibi, her ORM çağrısını sync_to_async()
benzer bir şekilde sarmak mümkündür :
images = await sync_to_async(Image.objects.all)()
ancak özellikle özellik aramasında örtük olarak çözülecek ilgili alanlar için çok uygun değildir.
( %autoawait off
Sihir denedim ama işe yaramadı , dokümanlardaki hızlı bir bakıştan, ipykernels'in her zaman bir asyncio döngüsünde çalıştığı için varsayıyorum)
Django'da eşzamansız bağlam denetiminde senkronizasyonu devre dışı bırakmanın veya eşzamanlı bağlamda bir ipykernel çalıştırmanın bir yolu var mı?
Bağlam için: django'yu arka uç sunucusu olarak kullanan ancak aynı zamanda ORM'nin üzerine verileri temizlemenize / açıklama eklemenize, makine öğrenme deneylerini izlemenize ve eğitim işlerini bir jupyter not defterinde çalıştırmanıza izin veren bir jupyter tabanlı arayüz ortaya koyan bir veri bilimi paketi yazdım. .
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
. Jupyter içinde denedim ve settings.py'ye de ekledim. BU hala benim jupyter hata veriyor