Python 3.13 में मुख्य बदलाव
- CPython v3.13.0 के 7 अक्टूबर 2024 को रिलीज़ होने की योजना है
- इस वर्ज़न में दो बड़े बदलाव शामिल हैं जो Python की performance पर बड़ा असर डाल सकते हैं
Global Interpreter Lock(GIL) को disable किया जा सकने वाला "free-threaded" वर्ज़न
- experimental
Just-in-Time(JIT) compilation support
Global Interpreter Lock (GIL)
GIL क्या है?
- Python को 1980 के दशक के अंत में Guido Van Rossum ने single-threaded interpreter language के रूप में डिज़ाइन और implement किया था
- Python source code को bytecode में compile करता है, फिर interpreter उसे execute करता है
- objects तक सभी threads से सुरक्षित access के लिए global lock(GIL) का उपयोग किया जाता है
- यह एक global mutual exclusion lock है जो कई threads को एक साथ bytecode execute करने से रोकता है
- यह shared memory के उपयोग को सीमित करता है, लेकिन single-thread performance के लिए अच्छा है
Python में GIL क्यों है
- 1990 के दशक की शुरुआत में ज़्यादातर programs single-threaded थे, और single-core performance तेज़ी से बढ़ रही थी
- multi-thread safety के लिए single-thread performance की कुर्बानी देने की ज़रूरत नहीं थी
- कई cores का उपयोग multi-process के ज़रिए किया जा सकता है (
multiprocessing module)
अब GIL को क्यों हटाया जा रहा है?
- Python core developers लंबे समय से GIL हटाना चाहते थे, लेकिन single-thread performance घटने की चिंता के कारण यह संभव नहीं हो पाया
- हाल के वर्षों में multicore सामान्य हो गया है, इसलिए GIL के कारण multithreading की सीमाएँ समस्या बन रही हैं
- Microsoft के समर्थन से "Faster CPython" project ने Python performance सुधारने में योगदान दिया
- Sam Gross ने GIL-रहित implementation का प्रस्ताव दिया, जिसके बाद PEP 703 अपनाया गया
- चरणबद्ध rollout योजना: experimental option → official support → default mode
- इसी पृष्ठभूमि में GIL को धीरे-धीरे हटाने की योजना को मंज़ूरी मिली
Performance कैसी है?
- Free-threading enable करने पर single-thread performance लगभग 20% घट जाती है
- GIL disable की हुई multithreading में काफ़ी performance gain दिखता है
- GIL enable की हुई multithreading, single-threading से धीमी है
- GIL disable की हुई multithreading, multiprocessing जैसी performance दिखाती है
Free-threading Python का उपयोग कैसे करें?
pyenv से Python 3.13.0rc2t install करने पर free-threading वर्ज़न इस्तेमाल किया जा सकता है
- default रूप से GIL disable रहती है, और runtime पर
-X gil=1 से GIL फिर enable की जा सकती है
- यदि ऐसा module import किया जाए जो GIL-free को support नहीं करता, तो GIL अपने-आप enable हो जाती है
JIT (Just-in-Time) compiler
JIT क्या है?
- पारंपरिक ahead-of-time compilation के विपरीत, यह execution से ठीक पहले machine code बनाने की तकनीक है
- Python 3.13 से पहले bytecode को एक-एक करके machine instructions में बदलकर execute किया जाता था
- JIT आने से bytecode को एक बार में machine code में बदला जा सकता है और ज़रूरत पड़ने पर update भी किया जा सकता है
- Python 3.13 में जो तकनीक लाई गई है वह "copy-and-patch" JIT है, जो पहले से परिभाषित templates से match होने वाले bytecode को native code में patch करती है
- अधिक उन्नत JIT compilers अक्सर चलने वाले "hot" code regions को optimize कर सकते हैं
JIT का असर क्या होगा?
- कम समय में Python code लिखने या चलाने के तरीके में शायद कोई बड़ा बदलाव नहीं होगा
- लेकिन धीरे-धीरे performance improvement होगा और उम्मीद है कि यह दूसरी भाषाओं से बेहतर प्रतिस्पर्धा कर पाएगा
JIT का उपयोग कैसे करें?
- Python 3.13 में JIT experimental है और default रूप से enabled नहीं है
- build के समय
PYTHON_CONFIGURE_OPTS="--enable-experimental-jit" option से इसे enable किया जा सकता है
- runtime पर
PYTHON_JIT=0/1 से enable/disable को control किया जा सकता है
निष्कर्ष
- Python 3.13 एक बड़ा release है जो runtime में नए और दिलचस्प concepts और features ला रहा है
- GIL हटाने और JIT जोड़ने से महत्वपूर्ण बदलावों का संकेत मिलता है
- कम समय में शायद बहुत बड़ा बदलाव न दिखे, लेकिन लंबे समय में इसका Python performance पर सकारात्मक असर होगा
- जैसे-जैसे free-threading और JIT mature होंगे, खासकर CPU-bound workloads में performance पर बड़ा असर पड़ने की उम्मीद है
GN⁺ की राय
- यह Python 3.13 update Python ecosystem में बड़ा बदलाव ला सकता है। GIL हटने से multithreading bottleneck कम हो सकता है, और JIT आने से overall execution speed बेहतर होने की उम्मीद है।
- हालांकि, इन बदलावों को पूरी तरह stable होने में समय लगेगा। C extension जैसे मौजूदा packages के साथ compatibility issues आ सकते हैं, और multithreading programming में race condition जैसी नई bugs भी पैदा हो सकती हैं।
- Python की धीमी speed को लंबे समय से उसकी कमी माना जाता रहा है; उम्मीद है कि यह update उस धारणा को बदलेगा। अगर उसकी productivity और readability के साथ speed भी मज़बूत हो जाए, तो Python और व्यापक रूप से इस्तेमाल की जाने वाली language बन सकती है।
- फिर भी, मूल रूप से dynamic typed language होने की इसकी सीमाएँ बनी रहती हैं। static typed languages के फ़ायदों को लाने की कोशिशें भी जारी रहनी चाहिए। हाल में Python में आए type hinting और Cython जैसी चीज़ों का सक्रिय उपयोग कुछ हद तक मदद कर सकता है।
- कुल मिलाकर, Python 3.13 दिलचस्प और सकारात्मक बदलाव लाता दिख रहा है। उम्मीद है कि developers इन बदलावों को अच्छी तरह समझकर उनका उपयोग करेंगे और बेहतर Python programs बना पाएंगे
3 टिप्पणियां
GIL को हटाना और JIT, भले ही अभी शुरुआती स्तर पर हों, फिर भी Python की दिशा बदल देने वाली बेहद महत्वपूर्ण प्रगतियां हैं। 'सबसे धीमी भाषा' जैसी बदनामी को पीछे छोड़कर, आने वाले समय में और भी अधिक क्षेत्रों में इस्तेमाल होने वाले Python के भविष्य से काफी उम्मीदें हैं।
Free threading (GIL हटाने) के महत्व के बारे में PEP 703 में विभिन्न लोगों की राय के साथ काफ़ी अच्छी तरह से समझाया गया है.
साथ ही, उस PEP के अनुसार single thread में performance गिरावट केवल 5~6% बताई गई है, इसलिए इस लेख और कुछ HN टिप्पणियों में 20~50% performance गिरने का दावा सहज रूप से स्वीकार करना मुश्किल लगता है. इसकी पुष्टि करने वाला कोई स्रोत भी नहीं है.
Hacker News टिप्पणियाँ
यह राय कि GIL हटाने से सामान्य Python प्रोग्राम धीमे हो जाएंगे और जटिलता बढ़ेगी
इस बात पर शिकायत कि JIT enabled version डाउनलोड के लिए उपलब्ध नहीं है
यह राय कि यह "Jack and Jill went up the hill" वाली तुकबंदी जैसा लगता है
छोटे memory footprint वाले, कम समय तक चलने वाले प्रोग्राम्स में garbage collection बंद करने पर काफ़ी speedup मिलने का अनुभव
यह राय कि 2021 में GIL हटाने पर पहली चर्चा हुई थी, और उस समय के स्पष्टीकरण से संतुष्ट न होने वाले लोगों के लिए यह एक अच्छा सारांश है
यह सवाल कि क्या no-GIL वाले मामले को optimize करना सच में असंभव है
यह खबर कि release date 2 अक्टूबर से बदलकर 7 अक्टूबर कर दी गई
यह राय कि nogil का performance hit 20% बताया गया था, लेकिन यह 50% तक भी हो सकता है
यह राय कि शीर्षक चौंकाने वाला है
automatic parallelization पर हाल के काम की लिंक ढूँढने का सवाल