कोड को एक साथ चलाने और बेहतर उपयोगकर्ता अनुभव प्रदान करने के लिए इन तकनीकों का उपयोग करें।

चाबी छीनना

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

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

पायथन में समवर्तीता और समानता को ठीक से लागू करने के लिए उपलब्ध उपकरणों और पुस्तकालयों का अन्वेषण करें, और वे कैसे भिन्न हैं।

समवर्तीता और समांतरता को समझना

संगामिति और समानता कंप्यूटिंग में कार्य निष्पादन के दो मूलभूत सिद्धांतों को संदर्भित करती है। प्रत्येक की अपनी अलग विशेषताएँ हैं।

  1. संगामिति एक प्रोग्राम की एक ही समय में कई कार्यों को बिना आवश्यक रूप से निष्पादित किए प्रबंधित करने की क्षमता है। यह कार्यों को आपस में जोड़ने, उनके बीच इस तरह से स्विच करने के विचार के इर्द-गिर्द घूमता है जो एक साथ दिखाई देता है।
  2. समानतादूसरी ओर, इसमें समानांतर रूप से कई कार्यों को निष्पादित करना शामिल है। इसका आमतौर पर फायदा उठाया जाता है एकाधिक सीपीयू कोर या प्रोसेसर. समांतरता सही एक साथ निष्पादन को प्राप्त करती है, जिससे आप तेजी से कार्य कर सकते हैं, और कम्प्यूटेशनल रूप से गहन संचालन के लिए उपयुक्त है।

समवर्तीता और समांतरता का महत्व

कंप्यूटिंग में समरूपता और समानता की आवश्यकता को बढ़ा-चढ़ाकर नहीं कहा जा सकता। यहां बताया गया है कि ये तकनीकें क्यों मायने रखती हैं:

  1. संसाधन प्रयोग: कॉनकरेंसी सिस्टम संसाधनों के कुशल उपयोग की अनुमति देती है, जिससे यह सुनिश्चित होता है कि कार्य बाहरी संसाधनों की प्रतीक्षा करने के बजाय सक्रिय रूप से प्रगति कर रहे हैं।
  2. जवाबदेही: कॉनकरेंसी अनुप्रयोगों की प्रतिक्रियाशीलता में सुधार कर सकती है, विशेष रूप से उपयोगकर्ता इंटरफ़ेस या वेब सर्वर से जुड़े परिदृश्यों में।
  3. प्रदर्शन: इष्टतम प्रदर्शन प्राप्त करने के लिए समानांतरवाद महत्वपूर्ण है, विशेष रूप से जटिल गणना, डेटा प्रोसेसिंग और सिमुलेशन जैसे सीपीयू-बाध्य कार्यों में।
  4. अनुमापकता: स्केलेबल सिस्टम के निर्माण के लिए समवर्ती और समानता दोनों आवश्यक हैं।
  5. भविष्य प्रूफिंग: जैसे-जैसे हार्डवेयर रुझान मल्टीकोर प्रोसेसर के पक्ष में बने रहेंगे, समानता का उपयोग करने की क्षमता तेजी से आवश्यक हो जाएगी।

पायथन में समवर्तीता

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

पायथन में थ्रेडिंग

थ्रेडिंग एक पायथन समवर्ती तंत्र है जो आपको एक ही प्रक्रिया के भीतर कार्य बनाने और प्रबंधित करने की अनुमति देता है। थ्रेड्स कुछ प्रकार के कार्यों के लिए उपयुक्त हैं, विशेष रूप से वे जो I/O-बाउंड हैं और समवर्ती निष्पादन से लाभ उठा सकते हैं।

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

नीचे दिया गया कोड थ्रेड का उपयोग करके समवर्ती कार्यान्वयन का एक उदाहरण दिखाता है। यह HTTP अनुरोध भेजने के लिए पायथन अनुरोध लाइब्रेरी का उपयोग करता है, जो एक सामान्य I/O अवरोधक कार्य है। इसका भी उपयोग करता है निष्पादन समय की गणना करने के लिए समय मॉड्यूल.

import requests
import time
import threading

urls = [
'https://www.google.com',
'https://www.wikipedia.org',
'https://www.makeuseof.com',
]

# function to request a URL
defdownload_url(url):
response = requests.get(url)
print(f"Downloaded {url} - Status Code: {response.status_code}")

# Execute without threads and measure execution time
start_time = time.time()

for url in urls:
download_url(url)

end_time = time.time()
print(f"Sequential download took {end_time - start_time:.2f} seconds\n")

# Execute with threads, resetting the time to measure new execution time
start_time = time.time()
threads = []

for url in urls:
thread = threading.Thread(target=download_url, args=(url,))
thread.start()
threads.append(thread)

# Wait for all threads to complete
for thread in threads:
thread.join()

end_time = time.time()
print(f"Threaded download took {end_time - start_time:.2f} seconds")

इस प्रोग्राम को चलाने पर, आपको देखना चाहिए कि थ्रेडेड अनुरोध अनुक्रमिक अनुरोधों की तुलना में कितने तेज़ हैं। हालाँकि अंतर केवल एक सेकंड का एक अंश है, I/O-बाउंड कार्यों के लिए थ्रेड का उपयोग करते समय आपको प्रदर्शन में सुधार की स्पष्ट समझ मिलती है।

Asyncio के साथ अतुल्यकालिक प्रोग्रामिंग

asyncio एक इवेंट लूप प्रदान करता है जो कोरआउट्स नामक अतुल्यकालिक कार्यों का प्रबंधन करता है। कॉरआउट्स ऐसे फ़ंक्शन हैं जिन्हें आप रोक सकते हैं और फिर से शुरू कर सकते हैं, जो उन्हें I/O-बाउंड कार्यों के लिए आदर्श बनाते हैं। लाइब्रेरी उन परिदृश्यों के लिए विशेष रूप से उपयोगी है जहां कार्यों में बाहरी संसाधनों, जैसे नेटवर्क अनुरोधों की प्रतीक्षा करना शामिल है।

आप काम करने के लिए पिछले अनुरोध-भेजने वाले उदाहरण को संशोधित कर सकते हैं asyncio:

import asyncio
import aiohttp
import time

urls = [
'https://www.google.com',
'https://www.wikipedia.org',
'https://www.makeuseof.com',
]

# asynchronous function to request URL
asyncdefdownload_url(url):
asyncwith aiohttp.ClientSession() as session:
asyncwith session.get(url) as response:
content = await response.text()
print(f"Downloaded {url} - Status Code: {response.status}")

# Main asynchronous function
asyncdefmain():
# Create a list of tasks to download each URL concurrently
tasks = [download_url(url) for url in urls]

# Gather and execute the tasks concurrently
await asyncio.gather(*tasks)

start_time = time.time()

# Run the main asynchronous function
asyncio.run(main())

end_time = time.time()

print(f"Asyncio download took {end_time - start_time:.2f} seconds")

कोड का उपयोग करके, आप समवर्ती रूप से उपयोग करके वेब पेज डाउनलोड कर सकते हैं asyncio और एसिंक्रोनस I/O संचालन का लाभ उठाएं। यह I/O-बाउंड कार्यों के लिए थ्रेडिंग से अधिक कुशल हो सकता है।

पायथन में समानता

आप समांतरता का उपयोग करके कार्यान्वित कर सकते हैं अजगर का बहु मापांक, जो आपको मल्टीकोर प्रोसेसर का पूरा लाभ उठाने की अनुमति देता है।

पायथन में मल्टीप्रोसेसिंग

अजगर का बहु मॉड्यूल अलग-अलग प्रक्रियाएं बनाकर समानता प्राप्त करने का एक तरीका प्रदान करता है, प्रत्येक का अपना पायथन दुभाषिया और मेमोरी स्पेस होता है। यह ग्लोबल इंटरप्रेटर लॉक (जीआईएल) को प्रभावी ढंग से बायपास करता है, जिससे यह सीपीयू-बाउंड कार्यों के लिए उपयुक्त हो जाता है।

import requests
import multiprocessing
import time

urls = [
'https://www.google.com',
'https://www.wikipedia.org',
'https://www.makeuseof.com',
]

# function to request a URL
defdownload_url(url):
response = requests.get(url)
print(f"Downloaded {url} - Status Code: {response.status_code}")

defmain():
# Create a multiprocessing pool with a specified number of processes
num_processes = len(urls)
pool = multiprocessing.Pool(processes=num_processes)

start_time = time.time()
pool.map(download_url, urls)
end_time = time.time()

# Close the pool and wait for all processes to finish
pool.close()
pool.join()

print(f"Multiprocessing download took {end_time-start_time:.2f} seconds")

main()

इस उदाहरण में, बहु अनुमति देते हुए, कई प्रक्रियाओं को जन्म देता है डाउनलोड_यूआरएल समानांतर में चलने का कार्य।

समवर्ती या समांतरता का उपयोग कब करें

समवर्तीता और समानता के बीच का चुनाव आपके कार्यों की प्रकृति और उपलब्ध हार्डवेयर संसाधनों पर निर्भर करता है।

I/O-बाउंड कार्यों से निपटने के दौरान आप समवर्ती का उपयोग कर सकते हैं, जैसे कि फ़ाइलों को पढ़ना और लिखना या नेटवर्क अनुरोध करना, और जब स्मृति बाधाएं चिंता का विषय हों।

जब आपके पास सीपीयू-बाउंड कार्य हों जो वास्तविक समानता से लाभान्वित हो सकते हैं और जब आपके पास कार्यों के बीच मजबूत अलगाव होता है, जहां एक कार्य की विफलता दूसरों को प्रभावित नहीं करती है, तो मल्टीप्रोसेसिंग का उपयोग करें।

समवर्तीता और समांतरता का लाभ उठाएं

समानांतरवाद और समवर्तीता आपके पायथन कोड की प्रतिक्रिया और प्रदर्शन को बेहतर बनाने के प्रभावी तरीके हैं। इन अवधारणाओं के बीच अंतर को समझना और सबसे प्रभावी रणनीति का चयन करना महत्वपूर्ण है।

चाहे आप सीपीयू-बाउंड या आई/ओ-बाउंड प्रक्रियाओं के साथ काम कर रहे हों, पायथन आपके कोड को समवर्ती या समांतरता के माध्यम से अधिक प्रभावी बनाने के लिए आवश्यक टूल और मॉड्यूल प्रदान करता है।