Files
courses/py3interm/EXAMPLES/thr_locking.py
T
2025-05-20 11:57:43 -04:00

39 lines
989 B
Python

#!/usr/bin/env python
import threading # <1>
import random
import time
WORDS = 'apple banana mango peach papaya cherry lemon watermelon fig elderberry'.split()
MAX_SLEEP_TIME = 3
WORD_LIST = [] # <2>
WORD_LIST_LOCK = threading.Lock() # <3>
STDOUT_LOCK = threading.Lock() # <3>
class SimpleThread(threading.Thread):
def __init__(self, num, word): # <4>
super().__init__() # <5>
self._word = word
self._num = num
def run(self): # <6>
time.sleep(random.randint(1, MAX_SLEEP_TIME))
with STDOUT_LOCK: # <7>
print("Hello from thread {} ({})".format(self._num, self._word))
with WORD_LIST_LOCK: # <7>
WORD_LIST.append(self._word.upper())
all_threads = [] # <8>
for i, random_word in enumerate(WORDS, 1):
t = SimpleThread(i, random_word) # <9>
all_threads.append(t) # <10>
t.start() # <11>
print("All threads launched...")
for t in all_threads:
t.join() # <12>
print(WORD_LIST)