Global Interpreter Lock, CPython में एक mutex है जो एक समय पर सिर्फ एक थ्रेड को Python bytecode चलाने देता है, और इंटरप्रेटर की स्टेट जैसे reference counts और अंदरूनी ऑब्जेक्ट स्ट्रक्चर को सुरक्षित रखता है। इसका मतलब है कि CPU bound Python कोड में थ्रेड्स से पैरेलल स्पीडअप नहीं मिलता, लेकिन I/O में वे फिर भी मदद करते हैं, क्योंकि blocking calls और C extension के काम के दौरान यह लॉक छोड़ दिया जाता है।
इंटरव्यूअर यह क्यों पूछते हैं
Python की गहराई परखने वाला यह क्लासिक फिल्टर सवाल है। इंटरव्यूअर सुनना चाहते हैं कि आप समझते हैं threading I/O bound काम में क्यों मदद करती है और CPU bound में क्यों नहीं, और जब सच में पैरेललिज्म चाहिए तो आप multiprocessing या native extensions की तरफ जा सकते हैं। 'Python में थ्रेड्स चलते ही नहीं' जैसे ढीले जवाब बताते हैं कि सामने वाले ने एक नारा रट लिया है, रनटाइम के बारे में सोचा नहीं है।
अपना जवाब कैसे स्ट्रक्चर करें
- एक वाक्य में GIL की परिभाषा दें।
- बताएं कि यह किसकी रक्षा करता है और CPython में यह क्यों है।
- I/O bound और CPU bound काम का फर्क बताएं।
- वे रास्ते बताएं जो आप असल में इस्तेमाल करते हैं।
उदाहरण जवाब
GIL, CPython में एक अकेला लॉक है जो पक्का करता है कि किसी भी पल में सिर्फ एक थ्रेड Python bytecode चला रहा हो। यह इसलिए है क्योंकि reference counting थ्रेड सेफ नहीं है, और हर ऑब्जेक्ट पर अलग लॉक लगाना उस सिंगल थ्रेडेड केस के लिए धीमा पड़ता जिसमें ज्यादातर कोड रहता है। व्यावहारिक तौर पर इसका मतलब है कि थ्रेड्स इंतजार करने में शानदार हैं और कैलकुलेशन में बेकार। जिस डेटा पाइपलाइन पर मैंने काम किया था, उसमें एक स्टेप करीब आठ सौ URLs खींच रहा था, और उसे सीरियल लूप से थ्रेड पूल पर ले जाने से वह लगभग नौ मिनट से घटकर एक मिनट के अंदर आ गया, क्योंकि हर वर्कर अपना ज्यादातर वक्त सॉकेट पर ब्लॉक रहता है और इंतजार करते हुए लॉक छोड़ देता है। उसके बगल वाले parsing स्टेप को कोई फायदा नहीं हुआ, इसलिए उसे हमने process pool में डाल दिया। Numpy और दूसरे C extensions भी लंबे चलने वाले native calls के अंदर लॉक छोड़ देते हैं, इसीलिए भारी array math थ्रेड्स में भी पैरेलल जैसी दिख सकती है। जब कोई मुझसे कहता है कि Python में concurrency होती ही नहीं, तो मैं आम तौर पर पूछता हूं कि आपका मतलब किस तरह की concurrency से है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- तो multiprocessing इससे कैसे बच निकलती है?
- जब कोई C extension चलता है तो GIL का क्या होता है?
- क्या आपने free-threaded build देखी है?
Python डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें