Безопасного общего API для принудительного завершения Python-потока нет. Поток останавливают кооперативно: сигналом, проверками отмены и ограниченными по времени блокирующими операциями.
Можно ли в Python безопасно принудительно завершить выполняющийся поток?
Безопасного общего API для принудительного завершения Python-потока нет. Поток останавливают кооперативно: сигналом, проверками отмены и ограниченными по времени блокирующими операциями.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Безопасного общего API для принудительного завершения Python-потока нет. Поток останавливают кооперативно: сигналом, проверками отмены и ограниченными по времени блокирующими операциями.
Например, worker периодически проверяет threading.Event и выходит через finally, освобождая ресурсы. join(timeout) лишь ограничивает ожидание вызывающего потока и не убивает worker. Принудительная инъекция исключения может оставить lock, транзакцию или структуру данных в некорректном состоянии. Для недоверенной либо неотменяемой работы используют отдельный процесс и заранее продумывают восстановление после его завершения. Даже процесс нельзя считать безопасно прерванным для внешних эффектов.