परिचय
समवर्ती प्रोग्रामिंग के लिए पायथन में थ्रेड्स, सबप्रोसेसेस, जनरेटर और अन्य ट्रिक्स का उपयोग करने जैसे विभिन्न दृष्टिकोण हैं। इससे पहले कि हम थ्रेड्स को लागू करें, आइए समझते हैं कि वास्तव में समवर्ती क्या है।
Concurrency एक एकल प्रोग्राम के भीतर तर्क का एक टुकड़ा है जो निष्पादन के कई अलग-अलग रास्तों को खोलने की अनुमति देता है, जिसमें I / O की अलग-अलग धाराएँ, SQL क्वेरी चलाना शामिल है, इस तरह से निष्पादन एक साथ और एक दूसरे से स्वतंत्र दोनों लगता है ।
इसे कैसे करें..
पहले हम साइट यूआरएल के माध्यम से जाने के लिए एक थ्रेड बनाते हैं और बाद में प्रोग्राम को गति देने के लिए थ्रेडिंग अवधारणाओं का उपयोग करने के तरीके को देखते हैं।
# Step 1 - Make a list of website url you want to visit today import requests tutorialpoints_url = ['https://www.tutorialspoint.com/python/index.htm', 'https://www.tutorialspoint.com/cplusplus/index.htm', 'https://www.tutorialspoint.com/java/index.htm', 'https://www.tutorialspoint.com/html/index.htm', 'https://www.tutorialspoint.com/cprogramming/index.htm']
# function to request the url passed and return the status code def visit_site(site_url): """ Makes a GET request to a website URL and prints response information """ response = requests.get(site_url) print(f' *** {site_url} returned {response.status_code} after {response.elapsed} seconds')
# Let us create a single thread to fetch the response if __name__ == '__main__': for site_url in tutorialpoints_url: visit_site(site_url) print(f" *** end of the program ***")
*** https://www.tutorialspoint.com/python/index.htm returned 200 after 0:00:00.091103 seconds *** https://www.tutorialspoint.com/cplusplus/index.htm returned 200 after 0:00:00.069889 seconds *** https://www.tutorialspoint.com/java/index.htm returned 200 after 0:00:00.075864 seconds *** https://www.tutorialspoint.com/html/index.htm returned 200 after 0:00:00.075270 seconds *** https://www.tutorialspoint.com/cprogramming/index.htm returned 200 after 0:00:00.077984 seconds *** end of the program ***
आपने आउटपुट से क्या देखा? साइट url को क्रमिक रूप से संसाधित किया जाता है, बस कल्पना करें कि यदि आप विभिन्न भौगोलिक स्थानों से 100 url देखना चाहते हैं तो आपका प्रोग्राम सर्वर से प्रतिक्रिया की प्रतीक्षा में बहुत समय व्यतीत कर सकता है।
आइए अब समानांतर में अनुरोध सबमिट करने के लिए एक थ्रेडेड प्रोग्राम लिखें और प्रतीक्षा किए बिना अगले चरण पर आगे बढ़ें।
from threading import Thread # function to request the url passed and return the status code def visit_site(site_url): """ Makes a GET request to a website URL and prints response information """ response = requests.get(site_url) print(f' *** {site_url} returned {response.status_code} after {response.elapsed} seconds') # Loop through the website url and create threads for each url if __name__ == '__main__': for site_url in tutorialpoints_url: t = Thread(target=visit_site, args=(site_url,)) t.start()
*** https://www.tutorialspoint.com/python/index.htm returned 200 after 0:00:00.082176 seconds *** https://www.tutorialspoint.com/html/index.htm returned 200 after 0:00:00.086269 seconds *** https://www.tutorialspoint.com/java/index.htm returned 200 after 0:00:00.100746 seconds *** https://www.tutorialspoint.com/cplusplus/index.htm returned 200 after 0:00:00.120744 seconds *** https://www.tutorialspoint.com/cprogramming/index.htm returned 200 after 0:00:00.111489 seconds
चर्चा..
-
थ्रेडिंग लाइब्रेरी का उपयोग किसी भी पायथन कॉल करने योग्य को अपने थ्रेड में निष्पादित करने के लिए किया जा सकता है।
-
start() विधि साइट_यूआरएल तर्कों के साथ विज़िट_साइट फ़ंक्शन को आमंत्रित करती है।
-
एक बार शुरू होने वाले थ्रेड्स को उनके अपने थ्रेड में निष्पादित किया जाता है जो पूरी तरह से ऑपरेटिंग सिस्टम द्वारा संचालित होता है।
अब यदि आप देखना चाहते हैं कि आपके धागे जीवित हैं या मृत (पूर्ण) तो हम is_alive फ़ंक्शन का उपयोग कर सकते हैं।
if t.is_alive(): print(f' *** {t} is Still executing') else: print(f' *** {t} is Completed')
*** <Thread(Thread-10, stopped 4820)> is Completed