बैरियर एक पायथन सिंक्रोनाइज़ेशन तकनीक प्रदान करता है जिसके साथ एकल या एकाधिक थ्रेड गतिविधियों के एक सेट में एक बिंदु तक प्रतीक्षा करते हैं और एक साथ प्रगति करते हैं।
एक बाधा वस्तु को परिभाषित करने के लिए, "थ्रेडिंग. बैरियर” का प्रयोग किया जाता है।
थ्रेडिंग.बैरियर(पार्टियां, एक्शन =कोई नहीं, टाइमआउट =कोई नहीं)
कहां,
-
पार्टियां =थ्रेड्स की संख्या
-
क्रिया =रिलीज़ होने पर किसी एक थ्रेड द्वारा कॉल किया जाता है।
-
टाइमआउट =डिफ़ॉल्ट टाइमआउट मान। यदि प्रतीक्षा () के लिए कोई टाइमआउट मान निर्दिष्ट नहीं है, तो इस टाइमआउट मान का उपयोग किया जाता है।
नीचे दी गई विधियों का उपयोग बैरियर वर्ग द्वारा किया जाता है।
Sr.No | विधि और विवरण |
---|---|
1 | पार्टियां कॉमन बैरियर पॉइंट तक पहुंचने के लिए कई थ्रेड्स की आवश्यकता होती है। |
2 | n_waiting कॉमन बैरियर पॉइंट में प्रतीक्षा कर रहे धागों की संख्या |
3 | टूटा एक बूलियन मान, सही- यदि बाधा टूटी हुई अवस्था में है तो अन्य गलत। |
4 | प्रतीक्षा करें (समय समाप्त =कोई नहीं) अधिसूचित होने या टाइमआउट होने तक प्रतीक्षा करें। यदि इस विधि को कॉल करते समय कॉलिंग थ्रेड ने लॉक प्राप्त नहीं किया है, तो रनटाइम त्रुटि उठाई जाती है। यह विधि अंतर्निहित लॉक को रिलीज़ करती है और तब तक ब्लॉक करती है जब तक कि यह किसी अन्य थ्रेड में एक ही स्थिति चर के लिए एक अधिसूचना () या Inform_all () विधि कॉल द्वारा जागृत नहीं हो जाती है, या जब तक वैकल्पिक टाइमआउट नहीं होता है। एक बार जागृत या समय समाप्त हो जाने पर, यह ताला फिर से प्राप्त कर लेता है और वापस आ जाता है। जब समयबाह्य तर्क मौजूद है और नहीं कोई नहीं , यह एक फ्लोटिंग पॉइंट नंबर होना चाहिए जो सेकंड (या उसके अंश) में ऑपरेशन के लिए टाइमआउट निर्दिष्ट करता है। |
5 | reset() बैरियर को डिफ़ॉल्ट स्थिति में सेट करें या वापस करें। खाली अवस्था। और उस पर प्रतीक्षा कर रहे थ्रेड्स को BrokenBarrierError प्राप्त होगा। |
6 | निरस्त () यह बाधा को एक टूटी हुई स्थिति में डाल देगा। यह सभी सक्रिय थ्रेड्स या भविष्य के किसी भी कॉल को BrokenBarrierError के साथ विफल होने के लिए प्रतीक्षा () का कारण बनता है। |
barrierThread.py
यादृच्छिक आयात रैंडरेंज से थ्रेडिंग इंपोर्ट बैरियर, थ्रेडफ्रॉम टाइम इंपोर्ट टाइम, स्लीपनम =4# 4 थ्रेड्स को रिलीज़ होने के लिए इस बैरियर को पास करना होगा। b =बैरियर (संख्या) नाम =['इंडिया', 'जापान', ' यूएसए', 'चीन'] डीईएफ़ प्लेयर ():नाम =नाम। पॉप () स्लीप (रैंडरेंज (2, 5)) प्रिंट ('%s बैरियर पर पहुंच गया:% s \ n'% (नाम, ctime ()) )) b.wait () थ्रेड्स =[] प्रिंट ("रेस अब शुरू होता है ...") के लिए मैं रेंज में (संख्या):थ्रेड्स। एपेंड (थ्रेड (टारगेट =प्लेयर)) थ्रेड्स [-1]। स्टार्ट ()"" "नीचे लूप मुख्य स्क्रिप्ट के साथ आगे बढ़ने से पहले थ्रेड्स के पूरा होने की प्रतीक्षा को सक्षम बनाता है।"परिणाम
रेस अब शुरू... भारत बैरियर पर पहुंचा:शुक्र जनवरी 18 14:07:44 2019चीन बैरियर पर पहुंचा:शुक्र जनवरी 18 14:07:44 2019जापान बैरियर पर पहुंचा:शुक्र जनवरी 18 14:07:46 2019USA बैरियर पर पहुंचे:शुक्र जनवरी 18 14:07:46 2019सभी बैरियर प्वाइंट पर पहुंचे!