Поведение Python sys.exit, когда поток, не являющийся демоном, ожидает блокировки бесконечно

Я относительно новичок в Python и хотел бы понять поведение sys.exit () в следующем случае.

Основной поток вызывает sys.exit (), но есть еще один поток, не являющийся демоном, который уже неопределенно ожидает некоторой блокировки.

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

Заранее спасибо за помощь.


person Buchi    schedule 10.04.2012    source источник
comment
возможно, если вы выйдете из программы иначе, например: stackoverflow.com/questions/173278/   -  person cptPH    schedule 10.04.2012


Ответы (1)


Для потоков, созданных с помощью модуля threading, основной поток при выходе присоединяется ко всем потокам, не являющимся демонами. Вы можете увидеть это в threading.py, выполнив поиск по exitfunc (проверено в исходных кодах Python 2.4.5, 2.7.2 и 3.2.2)

Если у вас есть поток, не являющийся демоном, который ожидает блокировки, и вы не принимаете меры для снятия блокировки, тогда основной поток зависнет при выходе.

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

person Stephan A. Terre    schedule 11.04.2012