Python kill thread - PullRequest
       7

Python kill thread

5 голосов
/ 30 сентября 2010

Я пытаюсь убить поток в Python. Исключением может быть предпочтительный способ сделать это, поскольку изящный выход метода run потока через try: exception: pair позволит закрыть ресурсы.

Я пытался: Есть ли способ уничтожить нить в Python? , но указывает, что это не работает, пока код выполняет системный вызов (например, time.sleep). Есть ли способ вызвать исключение в другом потоке (или, если не возражаете, в процессе), который работает неважно, что поток выполняет?

1 Ответ

4 голосов
/ 30 сентября 2010

В целом, вызов асинхронных исключений трудно обрабатывать должным образом.Это связано с тем, что вместо того, чтобы иметь отдельные конкретные точки кода, где может быть сгенерировано исключение - и, следовательно, там, где необходимо проверить обработку исключений, - вместо этого, исключение может быть сгенерировано после любой инструкции байт-кода.Это значительно усложняет реализацию и полное тестирование обработки исключений.

Тем не менее, это можно сделать - но в настоящее время это небезопасно в Python.Вызывать исключение асинхронно в Python опасно, потому что вы можете вызвать его во время обработчика исключения , что вызовет другое исключение и предотвратит правильную очистку.См. Мой ответ на Как ограничить время выполнения вызова функции в Python .

Можно сигнализировать о некоторых формах ожидания для отмены, но в Python нет общей инфраструктуры для этого.Вам гораздо лучше либо избегать необходимости убивать поток, либо перемещать поток в процесс , где вы можете отправить сигнал всему процессу и выйти чисто.

...