"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > cProfile और PyPy मॉड्यूल का उपयोग करके पायथन कोड को अनुकूलित करना: एक संपूर्ण गाइड

cProfile और PyPy मॉड्यूल का उपयोग करके पायथन कोड को अनुकूलित करना: एक संपूर्ण गाइड

2024-11-07 को प्रकाशित
ब्राउज़ करें:395

Optimizing Python Code Using cProfile and PyPy module: A Complete Guide

परिचय

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

इस पोस्ट के अंत तक, आप सीखेंगे:

  1. cProfile मॉड्यूल का उपयोग करके प्रदर्शन बाधाओं की पहचान कैसे करें।
  2. गति के लिए अपने कोड को कैसे अनुकूलित करें।
  3. जस्ट-इन-टाइम (जेआईटी) संकलन के साथ अपने पायथन कार्यक्रमों को और तेज करने के लिए PyPy का उपयोग कैसे करें।

प्रदर्शन अनुकूलन क्यों मायने रखता है

पायथन अपने उपयोग में आसानी, पठनीयता और पुस्तकालयों के विशाल पारिस्थितिकी तंत्र के लिए जाना जाता है। लेकिन अपनी व्याख्यात्मक प्रकृति के कारण यह सी या जावा जैसी कुछ अन्य भाषाओं की तुलना में धीमी भी है। इसलिए, अपने पायथन कोड को अनुकूलित करने का तरीका जानना मशीन लर्निंग मॉडल, रीयल-टाइम सिस्टम या उच्च-आवृत्ति ट्रेडिंग सिस्टम जैसे प्रदर्शन-संवेदनशील अनुप्रयोगों में महत्वपूर्ण हो सकता है।

अनुकूलन आम तौर पर इन चरणों का पालन करता है:

  1. अपने कोड को प्रोफाइल करें यह समझने के लिए कि बाधाएं कहां हैं।
  2. कोड को अनुकूलित करें उन क्षेत्रों में जो अक्षम हैं।
  3. अधिकतम प्रदर्शन प्राप्त करने के लिए अनुकूलित कोड को PyPy जैसे तेज़ दुभाषिया में चलाएँ।

अब, आपके कोड की प्रोफाइलिंग शुरू करते हैं।

चरण 1: cProfile के साथ अपने कोड की प्रोफाइलिंग करें

सीप्रोफाइल क्या है?

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

कमांड लाइन से cProfile का उपयोग करना

किसी स्क्रिप्ट को प्रोफ़ाइल करने का सबसे सरल तरीका कमांड लाइन से cProfile चलाना है। उदाहरण के लिए, मान लें कि आपके पास my_script.py नामक एक स्क्रिप्ट है:

python -m cProfile -s cumulative my_script.py

स्पष्टीकरण:

  • -एम सीप्रोफाइल: पायथन की मानक लाइब्रेरी के हिस्से के रूप में सीप्रोफाइल मॉड्यूल चलाता है।
  • -s संचयी: प्रत्येक फ़ंक्शन में बिताए गए संचयी समय के आधार पर प्रोफ़ाइलिंग परिणामों को क्रमबद्ध करता है।
  • my_script.py: आपकी पायथन स्क्रिप्ट।

इससे आपका कोड अपना समय कहां व्यतीत कर रहा है इसका एक विस्तृत विश्लेषण तैयार होगा।

उदाहरण: पायथन स्क्रिप्ट की प्रोफाइलिंग

आइए एक बुनियादी पायथन स्क्रिप्ट देखें जो फाइबोनैचि संख्याओं की पुनरावर्ती गणना करती है:

def fibonacci(n):
    if n 



इस स्क्रिप्ट को cProfile के साथ चला रहा हूं:

python -m cProfile -s cumulative fibonacci_script.py

सीप्रोफ़ाइल आउटपुट को समझना

एक बार जब आप cProfile चलाएंगे, तो आपको कुछ इस तरह दिखाई देगा:

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     8320    0.050    0.000    0.124    0.000 fibonacci_script.py:3(fibonacci)

प्रत्येक कॉलम मुख्य प्रदर्शन डेटा प्रदान करता है:

  • ncalls: फ़ंक्शन को कितनी बार कॉल किया गया।
  • tottime: समारोह में बिताया गया कुल समय (उप-कार्यों को छोड़कर)।
  • cumtime: फ़ंक्शन में बिताया गया संचयी समय (उप-फ़ंक्शन सहित)।
  • प्रतिकॉल: प्रति कॉल समय।

यदि आपके फाइबोनैचि फ़ंक्शन में बहुत अधिक समय लगता है, तो यह आउटपुट आपको दिखाएगा कि आपके अनुकूलन प्रयासों को कहां केंद्रित करना है।

आपके कोड के विशिष्ट भागों की प्रोफ़ाइलिंग

यदि आप केवल विशिष्ट अनुभागों को प्रोफ़ाइल करना चाहते हैं तो आप अपने कोड के भीतर प्रोग्रामेटिक रूप से cProfile का भी उपयोग कर सकते हैं।

import cProfile

def fibonacci(n):
    if n 



चरण 2: अपने पायथन कोड को अनुकूलित करना

एक बार जब आप cProfile का उपयोग करके अपने कोड में बाधाओं की पहचान कर लेते हैं, तो इसे अनुकूलित करने का समय आ गया है।

सामान्य पायथन अनुकूलन तकनीकें

  1. अंतर्निहित फ़ंक्शंस का उपयोग करें: सम(), न्यूनतम(), और अधिकतम() जैसे अंतर्निहित फ़ंक्शंस पायथन में अत्यधिक अनुकूलित हैं और आमतौर पर मैन्युअल रूप से कार्यान्वित लूप की तुलना में तेज़ होते हैं।

उदाहरण:

   # Before: Custom sum loop
   total = 0
   for i in range(1000000):
       total  = i

   # After: Using built-in sum
   total = sum(range(1000000))
  1. अनावश्यक फ़ंक्शन कॉल से बचें: फ़ंक्शन कॉल में ओवरहेड होता है, विशेष रूप से लूप के अंदर। अनावश्यक कॉलों को कम करने का प्रयास करें।

उदाहरण:

   # Before: Unnecessary repeated calculations
   for i in range(1000):
       print(len(my_list))  # len() is called 1000 times

   # After: Compute once and reuse
   list_len = len(my_list)
   for i in range(1000):
       print(list_len)
  1. मेमोइज़ेशन: पुनरावर्ती कार्यों के लिए, आप बार-बार काम से बचने के लिए महंगी गणनाओं के परिणामों को संग्रहीत करने के लिए मेमोइज़ेशन का उपयोग कर सकते हैं।

उदाहरण:

   from functools import lru_cache

   @lru_cache(maxsize=None)
   def fibonacci(n):
       if n 



यह प्रत्येक पुनरावर्ती कॉल के परिणामों को संग्रहीत करके फाइबोनैचि गणना को बहुत तेज करता है।

चरण 3: जस्ट-इन-टाइम संकलन के लिए PyPy का उपयोग करना

PyPy क्या है?

PyPy एक वैकल्पिक पायथन दुभाषिया है जो आपके पायथन कोड को तेज करने के लिए जस्ट-इन-टाइम (JIT) संकलन का उपयोग करता है। PyPy अक्सर निष्पादित कोड पथों को मशीन कोड में संकलित करता है, जिससे यह कुछ कार्यों के लिए मानक CPython दुभाषिया की तुलना में बहुत तेज़ हो जाता है।

पीपीपी स्थापित करना

आप लिनक्स पर एपीटी या मैकओएस पर ब्रू जैसे पैकेज मैनेजर का उपयोग करके PyPy इंस्टॉल कर सकते हैं:

# On Ubuntu
sudo apt-get install pypy3

# On macOS (using Homebrew)
brew install pypy3

PyPy के साथ Python कोड चलाना

एक बार PyPy स्थापित हो जाने पर, आप CPython के बजाय इसके साथ अपनी स्क्रिप्ट चला सकते हैं:

pypy3 my_script.py

PyPy का उपयोग क्यों करें?

  • PyPy सीपीयू-बाध्य कार्यों के लिए आदर्श है जहां प्रोग्राम अपना अधिकांश समय गणना में व्यतीत करता है (उदाहरण के लिए, लूप, पुनरावर्ती फ़ंक्शन, संख्या-क्रंचिंग)।
  • PyPy का JIT कंपाइलर सबसे अधिक बार निष्पादित होने वाले कोड पथों को अनुकूलित करता है, जिसके परिणामस्वरूप बिना किसी कोड परिवर्तन के महत्वपूर्ण स्पीडअप हो सकता है।

चरण 4: अधिकतम अनुकूलन के लिए cProfile और PyPy का संयोजन

अब, आइए अपने पायथन कोड को पूरी तरह से अनुकूलित करने के लिए इन उपकरणों को संयोजित करें।

उदाहरण वर्कफ़्लो

  1. बाधाओं की पहचान करने के लिए cProfile का उपयोग करके अपना कोड प्रोफ़ाइल करें
  2. हमारे द्वारा चर्चा की गई तकनीकों का उपयोग करके अपना कोड अनुकूलित करें (बिल्ट-इन, मेमोइज़ेशन, अनावश्यक फ़ंक्शन कॉल से बचना)।
  3. अतिरिक्त प्रदर्शन सुधार प्राप्त करने के लिए अपना अनुकूलित कोड चलाएं PyPy के साथ।

आइए हमारे फाइबोनैचि उदाहरण पर दोबारा गौर करें और सब कुछ एक साथ रखें।

from functools import lru_cache

@lru_cache(maxsize=None)
def fibonacci(n):
    if n 



मेमोइज़ेशन के साथ कोड को अनुकूलित करने के बाद, आगे के प्रदर्शन में सुधार के लिए इसे PyPy का उपयोग करके चलाएं:

pypy3 fibonacci_script.py

निष्कर्ष

cProfile और PyPy का लाभ उठाकर, आप अपने Python कोड को काफी हद तक अनुकूलित कर सकते हैं। अपने कोड में प्रदर्शन संबंधी बाधाओं को पहचानने और उनका समाधान करने के लिए cProfile का उपयोग करें। फिर, JIT संकलन के माध्यम से अपने प्रोग्राम की निष्पादन गति को और बढ़ाने के लिए PyPy का उपयोग करें।

सारांश:

  1. प्रदर्शन बाधाओं को समझने के लिए अपने कोड को cProfile के साथ प्रोफाइल करें।
  2. पायथन अनुकूलन तकनीकों को लागू करें, जैसे बिल्ट-इन और मेमोइज़ेशन का उपयोग करना।
  3. और भी बेहतर प्रदर्शन प्राप्त करने के लिए PyPy पर अनुकूलित कोड चलाएँ।

इस दृष्टिकोण के साथ, आप अपने पायथन प्रोग्राम को तेजी से और अधिक कुशलता से चला सकते हैं, खासकर सीपीयू-बाउंड कार्यों के लिए।

मुझसे जुड़ें:
जीथब
लिंक्डइन

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/usooldatascience/optimization-python-code-using-cprofile-and-pypy-module-a-complete-guide-4779?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग से संपर्क करें @163.com हटाएं
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3