Подтвердить что ты не робот

Значение свойства демона в потоках Python

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

Документация гласит:

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

Я не уверен, что отличает это от обычной темы.

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

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() вызывается с живыми потоками?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

th.daemon = True #set this thread as a Daemon Thread

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

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