Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में बैरियर ऑब्जेक्ट्स

बैरियर पायथन सिंक्रनाइज़ेशन तकनीकों में से एक प्रदान करता है जिसके साथ एकल या एकाधिक थ्रेड गतिविधियों के एक सेट में एक बिंदु तक प्रतीक्षा करते हैं और एक साथ प्रगति करते हैं।

बैरियर ऑब्जेक्ट को परिभाषित करने के लिए, "threading.Barrier" का उपयोग किया जाता है।

threading.Barrier(parties, action=None, timeout=None)

जहां,

  • parties = थ्रेड्स की संख्या
  • action = जब वे जारी किए जाते हैं तो थ्रेड्स में से एक द्वारा कॉल किया जाता है।
  • timeout = डिफ़ॉल्ट टाइमआउट मान। यदि wait() के लिए कोई टाइमआउट मान निर्दिष्ट नहीं है, तो इस टाइमआउट मान का उपयोग किया जाता है।

बैरियर क्लास द्वारा नीचे उल्लिखित विधियों का उपयोग किया जाता है।

क्र.सं.विधि और विवरण
1parties
सामान्य बैरियर बिंदु तक पहुंचने के लिए आवश्यक थ्रेड्स की संख्या।
2n_waiting
सामान्य बैरियर बिंदु पर प्रतीक्षा कर रहे थ्रेड्स की संख्या।
3brokenएक बूलियन मान, True - यदि बैरियर टूटी हुई स्थिति में है अन्यथा False।
4wait(timeout=None)
सूचित होने या टाइमआउट होने तक प्रतीक्षा करें। यदि कॉलिंग थ्रेड ने इस मेथड को कॉल करते समय लॉक प्राप्त नहीं किया है, तो रनटाइम त्रुटि उत्पन्न होती है।
यह मेथड अंतर्निहित लॉक को जारी करता है और तब तक ब्लॉक करता है जब तक कि इसे किसी अन्य थ्रेड में उसी कंडीशन वेरिएबल के लिए notify() या notify_all() मेथड कॉल द्वारा जगाया नहीं जाता, या जब तक वैकल्पिक टाइमआउट नहीं होता। एक बार जागने या टाइमआउट होने पर, यह लॉक को पुनः प्राप्त करता है और लौटाता है।
जब timeout तर्क मौजूद हो और None न हो, तो यह सेकंड (या उसके अंश) में ऑपरेशन के लिए टाइमआउट निर्दिष्ट करने वाली एक फ्लोटिंग पॉइंट संख्या होनी चाहिए।
5reset()
बैरियर को डिफ़ॉल्ट स्थिति यानी खाली स्थिति पर सेट या लौटाएं। और इस पर प्रतीक्षा कर रहे थ्रेड्स को BrokenBarrierError प्राप्त होगा।
6abort()
यह बैरियर को टूटी हुई स्थिति में डाल देगा। इससे सभी सक्रिय थ्रेड्स या wait() के लिए किसी भी भविष्य के कॉल BrokenBarrierError के साथ विफल हो जाएंगे।

barrierThread.py

from random import randrange
from threading import Barrier, Thread
from time import ctime, sleep

num = 4  # 4 थ्रेड्स को रिलीज होने के लिए इस बैरियर को पास करना होगा
b = Barrier(num)
names = ['India', 'Japan', 'USA', 'China']

def player():
    name = names.pop()
    sleep(randrange(2, 5))
    print('%s reached the barrier at: %s \n' % (name, ctime()))
    b.wait()

threads = []
print("Race starts now...")
for i in range(num):
    threads.append(Thread(target=player))
    threads[-1].start()

""" नीचे लूप मुख्य स्क्रिप्ट के साथ आगे बढ़ने से पहले थ्रेड्स के पूरा होने की प्रतीक्षा करने में सक्षम बनाता है। """
for thread in threads:
    thread.join()
print("All Reached Barrier Point!")

परिणाम

Race starts now...
India reached the barrier at: Fri Jan 18 14:07:44 2019
China reached the barrier at: Fri Jan 18 14:07:44 2019
Japan reached the barrier at: Fri Jan 18 14:07:46 2019
USA reached the barrier at: Fri Jan 18 14:07:46 2019
All Reached Barrier Point!
  1. पायथन में फाइल ऑब्जेक्ट्स: पूरी गाइड पायथन में फाइल ऑब्जेक्ट्स: पूरी गाइड

    पायथन में, जब भी हम फाइल्स पढ़ने या लिखने का प्रयास करते हैं, हमें कोई लाइब्रेरी इम्पोर्ट करने की आवश्यकता नहीं होती क्योंकि यह नेटिवली हैंडल किया जाता है। सबसे पहली चीज जो हम करेंगे वह है बिल्ट-इन open फंक्शन का उपयोग करके एक फाइल ऑब्जेक्ट प्राप्त करना। open फंक्शन एक फाइल खोलता है और एक फाइल ऑब्ज

  1. - क्या पायथन फंक्शन्स ऑब्जेक्ट्स हैं?

    पायथन आपके लिए फंक्शन ऑब्जेक्ट्स बनाता है जब आप def स्टेटमेंट का उपयोग करते हैं, या जब आप lambda एक्सप्रेशन का उपयोग करते हैं: हम फंक्शन ऑब्जेक्ट को एट्रिब्यूट्स असाइन कर सकते हैं और उन्हें पुनः प्राप्त कर सकते हैं: उदाहरण def foo(): pass foo.score = 20 print(type(foo)) print(foo.score) print(type(l

  1. - Python और Boto3 का उपयोग करके S3 ऑब्जेक्ट्स को आसानी से पुनर्प्राप्त करें: चरण-दर-चरण गाइड

    इस पोस्ट में हम दिखाते हैं कि Python और Boto 3 लाइब्रेरी का उपयोग करके AWS S3 बकेट से फ़ाइलों और इमेजेस को कैसे डाउनलोड किया जाए। Boto Python के लिए एक AWS SDK है। यह उपयोग में आसान फ़ंक्शन प्रदान करता है जो EC2 और S3 बकेट जैसी AWS सेवाओं के साथ इंटरैक्ट कर सकते हैं। Python और Boto 3 के साथ S3 ऑब्जे