Какая разница, когда я устанавливаю поток python в качестве демона

Какая разница, когда я устанавливаю поток Python в качестве демона, используя thread.setDaemon(True)?


person Vijayendra Bapte    schedule 11.09.2009    source источник


Ответы (1)


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

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

Например, если вы пишете приложение с графическим интерфейсом, а пользователь закрывает главное окно, программа должна выйти. Но если у вас есть потоки, не связанные с демоном, этого не произойдет.

Из документов: http://docs.python.org/library/threading.html#threading.Thread.daemon

Его начальное значение наследуется от создающего потока; основной поток не является потоком демона, и поэтому все потоки, созданные в основном потоке, по умолчанию имеют значение daemon = False.

Вся программа Python завершает работу, когда не остается ни одного активного потока, отличного от демона.

person FogleBird    schedule 11.09.2009
comment
В порядке. Теперь у меня есть четкое представление о потоках демонов. Спасибо, приятель! - person Vijayendra Bapte; 13.09.2009
comment
Так что же происходит с потоками демона, когда вы закрываете приложение? - person mcont; 05.07.2015
comment
@Matteo, потоки демона уничтожаются при выходе из программы. - person Andrew_CS; 28.06.2016
comment
хорошо, исходя из этого определения, должен ли слушатель redis pubsub быть демоном или нет, как мне решить, я хочу бесконечно слушать сообщения redis pubsub, опубликованные из js, я могу либо установить демону значение true, а затем бесконечно запускать цикл while в основной поток для обработки прерываний, или я могу просто вызвать соединение с потоком, и в этом случае он также работает бесконечно - person PirateApp; 17.03.2019