Программа мгновенно завершает свою работу, игнорируя time.sleep () в потоке демона - PullRequest
0 голосов
/ 05 ноября 2018

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

import threading
import time

class ThreadingExample:
    def __init__(self):
        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True                           
        thread.start()                                 

    def run(self):

        # Do something
        print('Doing something important in the background')

        time.sleep(100)

        # a print statement will not be executed here even with flush=True

example = ThreadingExample()

Однако sleep не работает. Поток выполняется, так как печатается первый print в run (), однако программа завершается сразу после оператора print.

В целях тестирования я вставил еще один оператор print после сна (100), который тоже не печатает. в чем здесь проблема?

Этот код должен быть заполнен и воспроизведен

1 Ответ

0 голосов
/ 05 ноября 2018

Проблема в этой строке:

thread.daemon = True

Из документации :

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

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

Существует два способа решения этой проблемы:

  1. Удаление назначения thread.daemon = True, так что python будет ожидать выхода вашего потока.
  2. Явно ожидает завершения потока, вызывая thread.join().
...