Привет! В таких случаях обычно бывает, что один из потоков захватил лок (lock) и не отпускает его. Могу предложить следующее:
Программный код:
import threading
lock = threading.Lock()
def thread_function(name):
print(f'Thread {name}: starting')
with lock:
print(f'Thread {name}: has the lock')
# здесь какой-то код
print(f'Thread {name}: releasing the lock')
print(f'Thread {name}: finishing')
threads = []
for i in range(3):
t = threading.Thread(target=thread_function, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join()
Попробуй добавить такие логи в свой код для лучшего понимания, где именно поток застревает.