Свойство демона потока Python - PullRequest
39 голосов
/ 02 декабря 2010

Я немного запутался в том, что означает установка потока в качестве демона.Документация гласит:

Поток может быть помечен как «поток демона».Значение этого флага заключается в том, что вся программа Python завершается, когда остаются только потоки демона.Начальное значение наследуется от потока создания.Флаг можно установить через свойство daemon.

Я не уверен, что отличает это от обычного потока.Это говорит о том, что эта программа никогда не завершится?

def threadfunc():
    while True:
        time.sleep(1)

threading.Thread(target=threadfunc).start()

, даже если основной поток завершает свое выполнение.В то время как

def threadfunc():
    while True:
        time.sleep(1)

th = threading.Thread(target=threadfunc)
th.daemon = True
th.start()

закончится немедленно?

Я спрашиваю, потому что у меня есть ситуация, когда в моем основном потоке я вызываю sys.exit (), и процесс просто зависает, а мой другойтемы работают, как я вижу журнал.Это как-то связано с тем, что sys.exit () вызывается с живыми потоками?

Ответы [ 3 ]

36 голосов
/ 02 декабря 2010

Это говорит о том, что эта программа никогда не завершится?

Да, эта программа не завершится, просто попробуйте.

Я спрашиваю, потому что у меня есть ситуация, когда в моем основном потоке я вызываю sys.exit (), и процесс просто зависает, а остальные мои потоки работают так, как я вижу журнал.Имеет ли это какое-либо отношение к sys.exit (), вызываемому с живыми потоками?

Да, даже exit не остановит другие потоки, он просто вызовет SystemExit в основном потоке,Таким образом, хотя основной поток остановится (как и в случае любого другого необработанного исключения), все остальные не-демонические потоки продолжат работать.

12 голосов
/ 02 декабря 2010

Настройка thread.daemon = True разрешит выход из основной программы.Приложения обычно ждут, пока все дочерние потоки не закончатся, прежде чем завершить.

4 голосов
/ 16 января 2016
th.daemon = True #set this thread as a Daemon Thread

Вы можете думать в потоке Daemon как о сервисе, это означает, что он будет работать в фоновом режиме вашего компьютера, выполняя различные задачи, такие как индексация файлов, синтаксический анализ xml, получение новостей и т. Д., Все, что долго работаетprocess.

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

...