0

Пожалуйста, простите меня, если терминология моего вопроса не совсем правильная; Я не профессиональный программист.Почему мой поток Daemon приостанавливает выполнение вызывающей функции?

Это функция моей Daemon нить звонит:

def _pause_console(self, pause_time): 
    print("pausing console") 
    self.javaserver.server_muted = True 
    print("muted") 
    time.sleep(pause_time) 
    print("unmuted") 
    self.javaserver.server_muted = False 

Он вызывается этот код (все в одном классе):

pausetime = 30 
    print("starting pause...") 
    cm = threading.Thread(target=self._pause_console(pausetime), args=()) 
    cm.daemon = True 
    cm.start() 
    print("pause daemon thread started.") 

на консоль вывод печатает мои заявления печати (30 второй сон уточняются) в следующем порядке:

начиная паузу

задержавшись консоль

приглушенный

заглушены

пауза демон нить начал

Я ожидал, что "пауза демон ..", по крайней мере, показать перед 'заглушены' .. То есть, выполнение основного цикла будет продолжаться после запуска потока. Тем не менее, мне кажется, что «cm.start()» должен выйти до того, как «print (« pause daemon thread started..) »Выполняется инструкция?

Что я делаю неправильно или где моя концептуальная ошибка здесь?

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

ответ

1

Потому что ваш код сразу же вызывает целевую функцию при построении Thread объекта. Вы должны заменить его следующим:

cm = threading.Thread(target=self._pause_console, args=(pausetime,)) 
+0

Большое спасибо. Теперь это имеет смысл. –