39 lines
989 B
Python
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)
|