मैं थ्रेडिंग और समरूपता की मूल बातें समझने की कोशिश कर रहा हूं। मुझे एक साधारण मामला चाहिए जहां दो धागे बार-बार एक साझा संसाधन तक पहुंचने का प्रयास करते हैं।पायथन थ्रेडिंग। मैं धागा कैसे लॉक करूं?
कोड:
import threading
class Thread(threading.Thread):
def __init__(self, t, *args):
threading.Thread.__init__(self, target=t, args=args)
self.start()
count = 0
lock = threading.Lock()
def incre():
global count
lock.acquire()
try:
count += 1
finally:
lock.release()
def bye():
while True:
incre()
def hello_there():
while True:
incre()
def main():
hello = Thread(hello_there)
goodbye = Thread(bye)
while True:
print count
if __name__ == '__main__':
main()
तो, मैं दो धागे है, दोनों काउंटर बढ़ाने के लिए कोशिश कर रहा। मैंने सोचा कि अगर थ्रेड 'ए' को incre()
कहा जाता है, तो lock
स्थापित किया जाएगा, 'बी' को 'ए' जारी होने तक पहुंचने से रोक दिया जाएगा।
रनिंग यह स्पष्ट करता है कि यह मामला नहीं है। आपको सभी यादृच्छिक डेटा रेस-आईएसएच वृद्धि मिलती है।
लॉक ऑब्जेक्ट का उपयोग कैसे किया जाता है?
संपादित करें, इसके अतिरिक्त, मैंने ताले कार्यों के अंदर ताले लगाने की कोशिश की है, लेकिन अभी भी कोई भाग्य नहीं है।
आपका कोड नहीं चलता है। –
@Ignacio Vazquez-Abrams - अब चाहिए। मैंने 'if __name__' बिट छोड़ा। क्या आप इसका जिक्र कर रहे थे? – Zack
यह मेरे लिए भी नहीं चलता है। मैं उम्मीद करता हूं कि आपकी थ्रेड सृजन इस तरह दिखने की उम्मीद करेगी: 'हैलो = थ्रेडिंग। थ्रेड (लक्ष्य = हैलो_टेयर)' और फिर धागे को शुरू करने के लिए 'हैलो.स्टार्ट() '। –