Async संदर्भ जांच को ट्रिगर किए बिना एक ज्यूपिटर नोटबुक में django 3.0 ORM का उपयोग कैसे करें?


24

Django 3.0 asgi / async समर्थन जोड़ रहा है और इसके साथ एक async संदर्भ में तुल्यकालिक अनुरोध करने के चारों ओर एक गार्ड है । समवर्ती रूप से, IPython ने सिर्फ शीर्ष स्तर के async / प्रतीक्षा समर्थन को जोड़ा , जो लगता है कि एक डिफ़ॉल्ट ईवेंट लूप के अंदर पूरे दुभाषिया सत्र को चला रहा है।

दुर्भाग्य से इन दो महान जोड़ के संयोजन का मतलब है कि किसी भी 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जादू की कोशिश की, लेकिन यह काम नहीं किया, डॉक्स पर एक त्वरित नज़र से मैं यह मान रहा हूँ क्योंकि ipykernels हमेशा एसिंको लूप में चलता है)

तो क्या django में async संदर्भ जांच में सिंक को या तो अक्षम करने का एक तरीका है या एक तुल्यकालिक संदर्भ में ipykernel चलाने का कोई तरीका है?


संदर्भ के लिए: मैंने एक डेटा साइंस पैकेज लिखा है जो एक बैकएंड सर्वर के रूप में django का उपयोग करता है, लेकिन ORM के शीर्ष पर एक ज्यूपिटर आधारित इंटरफ़ेस को भी उजागर करता है जो आपको डेटा, ट्रैक मशीन लर्निंग प्रयोगों को साफ करने और एक जॉप नोटबुक में प्रशिक्षण कार्यों को चलाने की अनुमति देता है ।

जवाबों:


18

इससे मेरा काम बनता है

os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"

BTW, मैं कमांड का उपयोग करके अपनी नोटबुक शुरू करता हूं

./manage.py shell_plus --notebook

आशा है ये मदद करेगा


मैंने यह कोशिश की है। यह अभी भी jupyter में त्रुटि दिखाता है। मैं कहाँ रखूँ os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"? मैंने ज्यूपिटर के अंदर की कोशिश की और settings.py में भी जोड़ा। अभी भी मेरी जुपिटर त्रुटि दे रही है
संतोष योदिदी

2
मैंने इसे नोटबुक में रखा
वोज्टस कोज़ीज

@michalwols जवाब मेरे लिए काम किया
संतोष Yedidi

@SoshoshYedidi इसे cli में करें। जूपिटर सर्वर को चलाने से पहले वेरिएबल को एक्सपोर्ट करें।
सिद्धार्थ पंत

मेरे लिए भी काम किया। बस इसे सेटिंग्स में जोड़ें और नोटबुक पर शेल_प्लस चलाएं
शेखर

6

अभी के लिए मैं async_unsafe चेक को छोड़ने के लिए एक नई सेटिंग के साथ django के एक कांटा संस्करण का उपयोग करने की योजना बना रहा हूं । एक बार ORM को async समर्थन मिल जाने के बाद, मुझे शायद इसे सपोर्ट करने और झंडे को छोड़ने के लिए अपने प्रोजेक्ट को फिर से लिखना होगा।

EDIT: DJANGO_ALLOW_ASYNC_UNSAFEचेक को निष्क्रिय करने के लिए अब एक env वेरिएबल ( ) जोड़ने के लिए एक PR है ( https://github.com/django/django/pull/12172 )


यह परिवर्तन अब 3.0.1 के
Sayse

इस समाधान ने मेरे लिए काम किया। धन्यवाद
संतोष Yedidi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.