2
วิธีการใช้ django 3.0 ORM ใน Jupyter Notebook โดยไม่ทริกเกอร์การตรวจสอบบริบทของ async?
Django 3.0 คือการเพิ่มasgi สนับสนุน / async และด้วยยามรอบทำให้การร้องขอการซิงโครในบริบท ขณะเดียวกันIPython เพิ่งเพิ่มระดับบนสุด async สนับสนุน / รอคอยซึ่งดูเหมือนว่าจะทำงานภายในเซสชั่นล่ามทั้งห่วงเหตุการณ์เริ่มต้น น่าเสียดายที่การรวมกันของการเพิ่มที่ยอดเยี่ยมทั้งสองนี้หมายความว่าการดำเนินการ django ORM ในสมุดบันทึก jupyter ทำให้เกิด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ใช้เวทย์มนตร์ แต่มันใช้งานไม่ได้จากการมองอย่างรวดเร็วที่เอกสารฉันคิดว่าเป็นเพราะ ipykernels มักจะทำงานในลูป asyncio) ดังนั้นมีวิธีการอย่างใดอย่างหนึ่งปิดการซิงค์ในบริบทการตรวจสอบ async …