Я пытаюсь реализовать механизм блокировки для смягчения тупиковой ситуации. До сих пор реализованный ниже подход, код работает, как ожидалось, с количеством образцов. Любые отзывы об улучшении
основной процесс:
#mthread.py
import concurrent.futures
import third as t
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as exec:
secs = [6, 4, 3, 2, 1]
r = []
for sec in secs:
res = exec.submit(t.process, sec)
r.append(res)
Third.py
#third.py
import do_something as d
def process(seconds):
d.do_something(seconds)
# run subprocess.Popen() to perform addition logic
d.do_something(seconds) # again return do_something
функциональный сценарий
#do_something.py
import time
import threading
import third as t
lock = threading.RLock()
def do_something(seconds):
print(f'{threading.current_thread().getName()}')
with lock:
print('Lock')
print(f'Sleeping {seconds} second(s)...')
time.sleep(seconds)
# return seconds
print('Release')
Обычно вы не хотите спать, удерживая блокировку, так как это помешает другим потокам получить блокировку в течение длительного времени. (Если вы просто временно включите сон, чтобы поэкспериментировать, otoh, это нормально)