Junior — Middle
103
Hoe kun je bepalen of een parallelle thread in Python vastloopt of niet voltooid is?
Bedrijven waar gevraagd werd
Antwoord van AI
sobes.tech AI
Чтобы определить, что параллельный поток в Python застрял или не завершился, можно использовать несколько подходов:
-
Мониторинг состояния потока:
- Если используете модуль
threading, можно проверить методis_alive(), который возвращаетTrue, если поток еще работает.
- Если используете модуль
-
Таймауты и контроль времени выполнения:
- Запускать поток с таймаутом и проверять, не превышает ли время выполнения заданный лимит.
-
Логирование и heartbeat:
- Внутри потока периодически отправлять сигналы (например, обновлять метку времени), чтобы главный поток мог проверить, что поток не завис.
-
Использование
concurrent.futures:- При использовании
ThreadPoolExecutorилиProcessPoolExecutorможно вызвать методfuture.result(timeout=...), который выбросит исключение, если задача не завершилась вовремя.
- При использовании
Пример с использованием threading и проверки is_alive():
import threading
import time
def worker():
time.sleep(10) # Долгая задача
thread = threading.Thread(target=worker)
thread.start()
start_time = time.time()
while thread.is_alive():
if time.time() - start_time > 5:
print("Поток завис или работает слишком долго")
break
time.sleep(1)
else:
print("Поток завершился")