2010-09-30 2 views
5

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

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

+0

Возможный дубликат [Есть ли способ убить нить в Python?] (Http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in- питон) – Mark

ответ

4

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

Это, может быть, сделано, но в настоящее время не безопасно в Python. Повышение асинхронности исключения в Python опасно, потому что вы можете поднять его во время обработчика исключений, что вызовет еще одно исключение и предотвратит правильную очистку. См. Мой ответ на How to limit execution time of a function call in Python.

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