14 पॉइंट द्वारा GN⁺ 2024-09-29 | 3 टिप्पणियां | WhatsApp पर शेयर करें

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 टिप्पणियां

 
ilotoki0804 2024-09-30

GIL को हटाना और JIT, भले ही अभी शुरुआती स्तर पर हों, फिर भी Python की दिशा बदल देने वाली बेहद महत्वपूर्ण प्रगतियां हैं। 'सबसे धीमी भाषा' जैसी बदनामी को पीछे छोड़कर, आने वाले समय में और भी अधिक क्षेत्रों में इस्तेमाल होने वाले Python के भविष्य से काफी उम्मीदें हैं।

 
ilotoki0804 2024-09-30

Free threading (GIL हटाने) के महत्व के बारे में PEP 703 में विभिन्न लोगों की राय के साथ काफ़ी अच्छी तरह से समझाया गया है.
साथ ही, उस PEP के अनुसार single thread में performance गिरावट केवल 5~6% बताई गई है, इसलिए इस लेख और कुछ HN टिप्पणियों में 20~50% performance गिरने का दावा सहज रूप से स्वीकार करना मुश्किल लगता है. इसकी पुष्टि करने वाला कोई स्रोत भी नहीं है.

 
GN⁺ 2024-09-29
Hacker News टिप्पणियाँ
  • यह राय कि GIL हटाने से सामान्य Python प्रोग्राम धीमे हो जाएंगे और जटिलता बढ़ेगी

    • वास्तव में मिलने वाले फ़ायदों पर सवाल
    • अगर कई CPU cores का अधिकतम उपयोग करना हो, तो OS से प्रोग्राम की कई instances चलवाकर parallelization logic को प्रोग्राम में जोड़ने की बजाय उस तरीके का उपयोग करने की बात
  • इस बात पर शिकायत कि JIT enabled version डाउनलोड के लिए उपलब्ध नहीं है

    • Python 3.13 version को खुद compile किया जा सकता है, लेकिन अनुभव साझा किया गया कि बहुत से लोग इसे आज़माते नहीं और feedback भी नहीं देते
  • यह राय कि यह "Jack and Jill went up the hill" वाली तुकबंदी जैसा लगता है

    • "up the hill" का क्या मतलब है, इसे लेकर भ्रम था
    • JIT जारी किया गया, लेकिन क्या GIL हटाया गया या नहीं, इस पर सवाल
  • छोटे memory footprint वाले, कम समय तक चलने वाले प्रोग्राम्स में garbage collection बंद करने पर काफ़ी speedup मिलने का अनुभव

    • क्या इसे automate किया जा सकता है, इस पर जिज्ञासा
    • उन edge cases के जोखिम का ज़िक्र, जहाँ छोटा प्रोग्राम पूरी memory इस्तेमाल कर ले
  • यह राय कि 2021 में GIL हटाने पर पहली चर्चा हुई थी, और उस समय के स्पष्टीकरण से संतुष्ट न होने वाले लोगों के लिए यह एक अच्छा सारांश है

  • यह सवाल कि क्या no-GIL वाले मामले को optimize करना सच में असंभव है

    • 20% slowdown को बड़ी समस्या बताया गया
  • यह खबर कि release date 2 अक्टूबर से बदलकर 7 अक्टूबर कर दी गई

    • संबंधित लिंक दिया गया
  • यह राय कि nogil का performance hit 20% बताया गया था, लेकिन यह 50% तक भी हो सकता है

    • यह बात कि JIT बहुत ज़्यादा मददगार नहीं है
    • यह राय कि यह CPython की सामाजिक और corporate समस्याओं को दिखाने वाला निराशाजनक release है
    • यह दावा कि कुछ लोग features का वादा करते हैं, 100% उत्साहित न होने वालों को चुप कराते हैं, और फिर उम्मीद से कमज़ोर नतीजे देते हैं
  • यह राय कि शीर्षक चौंकाने वाला है

  • automatic parallelization पर हाल के काम की लिंक ढूँढने का सवाल

    • single-threaded code लिखने और compiler द्वारा multi-threaded code जनरेट करने के तरीके पर लिंक दिया गया