थ्रेडिंग प्रोग्राम के निष्पादन समय को काफी कम कर देता है। जानें कि पायथन में थ्रेडिंग कैसे लागू करें।

निष्पादन समय एक कार्यक्रम की दक्षता के सामान्य उपायों में से एक है। निष्पादन का समय जितना तेज़ होगा, कार्यक्रम उतना ही बेहतर होगा। थ्रेडिंग एक ऐसी तकनीक है जो एक प्रोग्राम को एक साथ कई कार्यों या प्रक्रियाओं को करने की अनुमति देती है।

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

थ्रेडिंग का महत्व

थ्रेडिंग किसी कार्य को पूरा करने में लगने वाले समय को कम कर देता है। यदि नौकरी में कई स्वतंत्र कार्य हैं, तो आप कार्यों को समवर्ती रूप से चलाने के लिए थ्रेडिंग का उपयोग कर सकते हैं, अगले पर जाने से पहले एक कार्य को पूरा करने के लिए प्रोग्राम के प्रतीक्षा समय को कम कर सकते हैं।

उदाहरण के लिए, एक प्रोग्राम जो इंटरनेट से कई छवि फ़ाइलें डाउनलोड करता है। यह प्रोग्राम फ़ाइलों को एक बार में एक के बजाय समानांतर में डाउनलोड करने के लिए थ्रेडिंग का उपयोग कर सकता है। यह उस समय को समाप्त कर देता है जब प्रोग्राम को अगली फ़ाइल पर जाने से पहले एक फ़ाइल की डाउनलोड प्रक्रिया को पूरा करने के लिए प्रतीक्षा करनी होगी।

instagram viewer

थ्रेडिंग से पहले प्रारंभिक कार्यक्रम

निम्नलिखित कार्यक्रम में कार्य एक कार्य का प्रतिनिधित्व करता है। कार्य एक सेकंड के लिए कार्यक्रम के निष्पादन को रोकना है। कार्यक्रम फ़ंक्शन को दो बार कॉल करता है इसलिए दो कार्य बनाता है। यह तब पूरे कार्यक्रम को चलाने में लगने वाले समय की गणना करता है और फिर इसे स्क्रीन पर प्रदर्शित करता है।

आयात समय

start_time = time.perf_counter ()

डीईएफ़रोकना():
प्रिंट ('1 सेकंड सोना...')
समय पर सोये(1)
प्रिंट ('हो गया सो जाओ...')

रोकना()
रोकना()
फिनिश_टाइम = टाइम.परफ_काउंटर ()
प्रिंट (एफ में संपन्न हुआ {दौर (finish_time - start_time, 2)} दूसरा (ओं)')

आउटपुट से पता चलता है कि प्रोग्राम को निष्पादित होने में 2.01 सेकंड का समय लगा। प्रत्येक कार्य में एक सेकंड का समय लगता था और शेष कोड को निष्पादित होने में 0.01 सेकंड का समय लगता था।

आप दोनों कार्यों को समवर्ती रूप से निष्पादित करने के लिए थ्रेडिंग का उपयोग कर सकते हैं। इससे दोनों कार्यों को निष्पादित करने में एक सेकंड का समय लगेगा।

थ्रेडिंग मॉड्यूल का उपयोग करके थ्रेडिंग लागू करना

थ्रेडिंग लागू करने के लिए प्रारंभिक कोड को संशोधित करने के लिए आयात करें सूत्रण मापांक। दो धागे बनाएँ, थ्रेड_1 और थ्रेड_2 का उपयोग धागा कक्षा। बुलाएं शुरू निष्पादन शुरू करने के लिए प्रत्येक थ्रेड पर विधि। बुलाएं जोड़ना बाकी कार्यक्रम के निष्पादन से पहले उनके निष्पादन के पूरा होने की प्रतीक्षा करने के लिए प्रत्येक थ्रेड पर विधि।

आयात समय
आयात सूत्रण
start_time = time.perf_counter ()

डीईएफ़रोकना():
प्रिंट ('1 सेकंड सोना...')
समय पर सोये(1)
प्रिंट ('हो गया सो जाओ...')

थ्रेड_1 = थ्रेडिंग. धागा (लक्ष्य = विराम)
थ्रेड_2 = थ्रेडिंग. धागा (लक्ष्य = विराम)

थ्रेड_1.शुरू ()
थ्रेड_2.शुरू ()

थ्रेड_1.जॉइन ()
थ्रेड_2.जॉइन ()

फिनिश_टाइम = टाइम.परफ_काउंटर ()
प्रिंट (एफ में संपन्न हुआ {दौर (finish_time - start_time, 2)} दूसरा (ओं)')

कार्यक्रम दोनों थ्रेड्स को समवर्ती रूप से चलाएगा। इससे दोनों कार्यों को पूरा करने में लगने वाले समय में कमी आएगी।

आउटपुट दिखाता है कि समान कार्यों को चलाने में लगने वाला समय लगभग एक सेकंड है। प्रारंभिक कार्यक्रम में लगने वाले समय का यह आधा समय है।

समवर्ती.फ्यूचर्स मॉड्यूल का उपयोग करके थ्रेडिंग को लागू करना

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

थ्रेडिंग का उपयोग करने के लिए प्रारंभिक प्रोग्राम को संशोधित करने के लिए, current.features मॉड्यूल आयात करें। उपयोग थ्रेडपूल एक्ज़ीक्यूटर थ्रेड का एक पूल बनाने के लिए समवर्ती.फ्यूचर्स मॉड्यूल से वर्ग। सबमिट करें रोकना दो बार पूल में कार्य करें। जमा करना विधि रिटर्न ए भविष्य ऑब्जेक्ट जो फ़ंक्शन कॉल के परिणाम का प्रतिनिधित्व करता है।

पर पुनरावृति करें फ्यूचर्स और उनके परिणाम का उपयोग कर प्रिंट करें परिणाम तरीका।

आयात समय
आयात समवर्ती। भविष्य

start_time = time.perf_counter ()

डीईएफ़रोकना():
प्रिंट ('1 सेकंड सोना...')
समय पर सोये(1)
वापस करना'हो गया सो जाओ...'

साथ समवर्ती। भविष्य। थ्रेडपूल निष्पादक () जैसा निष्पादक:
परिणाम = [निष्पादक। सबमिट करें (रोकें) के लिए _ में श्रेणी(2)]
के लिए एफ में current.futures.as_completed (परिणाम):
प्रिंट (f.result ())

फिनिश_टाइम = टाइम.परफ_काउंटर ()

प्रिंट (एफ में संपन्न हुआ {दौर (finish_time - start_time, 2)} दूसरा (ओं)')

Concurrent.features मॉड्यूल आपके लिए थ्रेड्स को शुरू करने और जोड़ने का ख्याल रखता है। यह आपके कोड क्लीनर बनाता है।

आउटपुट थ्रेडिंग मॉड्यूल के समान है। थ्रेडिंग मॉड्यूल साधारण मामलों के लिए उपयोगी होता है जहां आपको समानांतर में कुछ धागे चलाने की आवश्यकता होती है। दूसरी ओर, Concurrent.futuresमॉड्यूल अधिक जटिल मामलों के लिए उपयोगी है जहां आपको कई कार्यों को समवर्ती रूप से चलाने की आवश्यकता होती है।

वास्तविक दुनिया के परिदृश्य में थ्रेडिंग का उपयोग करना

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

पिप स्थापित अनुरोध

अनुरोध पुस्तकालय आपको HTTP अनुरोध भेजने की अनुमति देगा। अनुरोध पुस्तकालय और समय पुस्तकालय आयात करें।

आयात अनुरोध
आयात समय

उन छवियों के यूआरएल की एक सूची बनाएं जिन्हें आप डाउनलोड करना चाहते हैं। उन्हें कम से कम दस होने दें ताकि जब आप थ्रेडिंग लागू करें तो आप एक महत्वपूर्ण अंतर देख सकें।

img_urls = [
' https://images.unsplash.com/photo-1524429656589-6633a470097c',
' https://images.unsplash.com/photo-1530224264768-7ff8c1789d79',
' https://images.unsplash.com/photo-1564135624576-c5c88640f235',
' https://images.unsplash.com/photo-1541698444083-023c97d3f4b6',
' https://images.unsplash.com/photo-1522364723953-452d3431c267',
' https://images.unsplash.com/photo-1513938709626-033611b8cc03',
' https://images.unsplash.com/photo-1507143550189-fed454f93097',
' https://images.unsplash.com/photo-1493976040374-85c8e12f0c0e',
' https://images.unsplash.com/photo-1504198453319-5ce911bafcde',
' https://images.unsplash.com/photo-1530122037265-a5f1f91d3b99',
' https://images.unsplash.com/photo-1516972810927-80185027ca84',
' https://images.unsplash.com/photo-1550439062-609e1531270e',
]

सूची पर लूप करें प्रत्येक छवि को उसी फ़ोल्डर में डाउनलोड करने वाले URL की जिसमें आपका प्रोजेक्ट है। प्रारंभ समय से समाप्ति समय घटाकर छवियों को डाउनलोड करने में लगने वाला समय प्रदर्शित करें।

start_time = time.perf_counter ()
के लिए img_url में img_urls:
img_बाइट्स = अनुरोध.get (img_url).सामग्री
img_name = img_url.split('/')[3]
आईएमजी_नाम = एफ'{img_name}जेपीजी'
साथ खुला (img_name, पश्चिम बंगाल) जैसा img_file:
img_file.write (img_बाइट्स)
प्रिंट (एफ'{img_name} डाउनलोड किया गया था...')
फिनिश_टाइम = टाइम.परफ_काउंटर ()
प्रिंट (एफ में संपन्न हुआ {finish_time - start_time} सेकंड')

कार्यक्रम को 12 छवियों को डाउनलोड करने में लगभग 22 सेकंड लगते हैं। यह आपके लिए भिन्न हो सकता है क्योंकि छवियों को डाउनलोड करने में लगने वाला समय आपके इंटरनेट की गति पर भी निर्भर करता है।

समवर्ती.फीचर्स मॉड्यूल का उपयोग करके थ्रेडिंग का उपयोग करने के लिए प्रोग्राम को संशोधित करें। लूप के बजाय, फ़ंक्शन का उपयोग करें। यह वह कार्य है जिसे आप पास करेंगे निर्वाहक उदाहरण।

आयात अनुरोध
आयात समय
आयात समवर्ती। भविष्य

img_urls = [
' https://images.unsplash.com/photo-1524429656589-6633a470097c',
' https://images.unsplash.com/photo-1530224264768-7ff8c1789d79',
' https://images.unsplash.com/photo-1564135624576-c5c88640f235',
' https://images.unsplash.com/photo-1541698444083-023c97d3f4b6',
' https://images.unsplash.com/photo-1522364723953-452d3431c267',
' https://images.unsplash.com/photo-1513938709626-033611b8cc03',
' https://images.unsplash.com/photo-1507143550189-fed454f93097',
' https://images.unsplash.com/photo-1493976040374-85c8e12f0c0e',
' https://images.unsplash.com/photo-1504198453319-5ce911bafcde',
' https://images.unsplash.com/photo-1530122037265-a5f1f91d3b99',
' https://images.unsplash.com/photo-1516972810927-80185027ca84',
' https://images.unsplash.com/photo-1550439062-609e1531270e',
]

start_time = time.perf_counter ()

डीईएफ़download_image(img_url):
img_बाइट्स = अनुरोध.get (img_url).सामग्री
img_name = img_url.split('/')[3]
आईएमजी_नाम = एफ'{img_name}जेपीजी'
साथ खुला (img_name, पश्चिम बंगाल) जैसा img_file:
img_file.write (img_बाइट्स)
प्रिंट (एफ'{img_name} डाउनलोड किया गया था...')

साथ समवर्ती। भविष्य। थ्रेडपूल निष्पादक () जैसा निष्पादक:
निष्पादक.मैप (डाउनलोड_इमेज, img_urls)

फिनिश_टाइम = टाइम.परफ_काउंटर ()

प्रिंट (एफ में संपन्न हुआ {finish_time-start_time} सेकंड')

थ्रेडिंग शुरू करने के बाद। समय काफी कम हो जाता है। कार्यक्रम के निष्पादन को पूरा करने में केवल 4 सेकंड का समय लगा।

थ्रेडिंग के लिए उपयुक्त परिदृश्य

थ्रेडिंग के लिए उपयुक्त कुछ परिदृश्य हैं:

  • I/O बाध्य कार्य: यदि प्रोग्राम अधिकांश समय इनपुट या आउटपुट ऑपरेशंस के पूरा होने की प्रतीक्षा में बिताता है। I/O संचालन के पूर्ण होने की प्रतीक्षा करते समय थ्रेडिंग अन्य कार्यों को निष्पादित करने की अनुमति देकर प्रदर्शन में सुधार कर सकता है।
  • वेब स्क्रेपिंग: वेब स्क्रैपिंग में HTTP अनुरोध करना और HTML प्रतिक्रियाओं को पार्स करना शामिल है. थ्रेडिंग आपको एक साथ कई अनुरोध करने की अनुमति देकर प्रक्रिया को गति देने में मदद करती है।
  • सीपीयू-बाध्य कार्य: थ्रेडिंग कई कार्यों को समानांतर में निष्पादित करने की अनुमति देकर प्रदर्शन को बेहतर बनाने में मदद कर सकता है।

अन्य भाषाओं में थ्रेडिंग से खुद को परिचित करें

पायथन एकमात्र ऐसी भाषा नहीं है जो थ्रेडिंग का समर्थन करती है। अधिकांश प्रोग्रामिंग लैंग्वेज किसी न किसी रूप में थ्रेडिंग का समर्थन करती हैं। अन्य भाषाओं में थ्रेड्स के कार्यान्वयन से खुद को परिचित करना महत्वपूर्ण है। यह आपको विभिन्न परिदृश्यों से निपटने के लिए आवश्यक कौशल से लैस करता है जहाँ थ्रेडिंग लागू हो सकती है।