context manager कोई भी ऐसा ऑब्जेक्ट है जिसमें dunder enter और dunder exit हों। with स्टेटमेंट enter कॉल करता है, उसकी लौटाई वैल्यू as वाले नाम से बांधता है, और गारंटी देता है कि बॉडी में एक्सेप्शन आने पर भी exit चलेगा। exit को एक्सेप्शन की जानकारी मिलती है और True लौटाकर वह एक्सेप्शन दबा भी सकता है। contextlib.contextmanager decorator से यही चीज एक yield वाले generator की तरह लिखी जा सकती है।
इंटरव्यूअर यह क्यों पूछते हैं
Python सर्विसेज में resource leaks सबसे आम प्रोडक्शन फेल्योर में से हैं, इसलिए इंटरव्यूअर देखते हैं कि with आपकी आदत में है और आप उसकी गारंटी समझते हैं। वे यह भी देखना चाहते हैं कि आप एक लिख सकते हैं, सिर्फ इस्तेमाल नहीं करते, और आप जानते हैं कि एक्सेप्शन वाले रास्ते पर भी exit चलता है, यही उसे सफाई का तरीका बनाता है, सिर्फ सुविधाजनक सिंटैक्स नहीं।
अपना जवाब कैसे स्ट्रक्चर करें
- दोनों dunder methods और उनका काम बताएं।
- जोर दें कि एक्सेप्शन पर भी exit चलता है।
- contextlib वाले generator शॉर्टकट का जिक्र करें।
- अपना लिखा एक उदाहरण और उससे रुका leak बताएं।
उदाहरण जवाब
प्रोटोकॉल दो methods का है। enter सेटअप करता है और वह लौटाता है जो आप as के बाद बांधना चाहते हैं, और exit सफाई करता है। अहम बात यह है कि ब्लॉक ठीक से खत्म हो या फट जाए, exit दोनों हालात में चलता है, और उसे एक्सेप्शन का type, value और traceback मिलते हैं ताकि वह तय कर सके कि क्या करना है। exit से True लौटाने पर एक्सेप्शन निगल लिया जाता है, जो मैं बहुत कम इस्तेमाल करता हूं क्योंकि इससे फेल्योर छिपते हैं। मेरे लिखे ज्यादातर contextlib.contextmanager वाले होते हैं, जहां yield से पहले का कोड सेटअप है, बाद का सफाई, और मैं yield को try finally में लपेटता हूं ताकि गड़बड़ होने पर भी सफाई हो। एक fintech में मैंने डेटाबेस transactions के लिए एक लिखा था जो logging context पर request id भी चिपका देता था, ताकि ब्लॉक के अंदर की हर query ट्रेस हो सके और बाहर निकलते ही id हट जाए। उससे पहले हम इसे हाथ से सेट और क्लियर कर रहे थे, और एक handler में जल्दी return होने से id उसी वर्कर पर अगली request में लीक हो गई थी।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- एक साथ कई context managers कैसे संभालते हैं?
- contextlib.ExitStack किस समस्या को हल करता है?
- async context manager आप कैसे लिखेंगे?
Python डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें