为什么我的守护程序线程暂停调用函数的执行?

时间:2016-11-20 18:38:07

标签: python multithreading python-2.7 python-multithreading linuxmint

如果我的问题的术语不太正确,请原谅我;我不是专业的程序员。

这是我的守护程序线程正在调用的函数:

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秒睡眠):

  

开始暂停

     

暂停控制台

     

静音

     

静音

     

暂停守护程序线程启动

我原以为“暂停守护进程......”至少会出现在'unmuted'之前......即,主线程执行会在线程启动后继续执行。但是,(对我来说)似乎'cm.start()'必须在'print(“暂停守护程序线程启动。”)'语句执行之前退出?

我做错了什么或我的概念错误在哪里?

(很难相信之前没有人遇到过这个,但我似乎无法在这里找到类似的问题)

1 个答案:

答案 0 :(得分:1)

因为您的代码在构造Thread对象时会立即调用目标函数。您应该用以下内容替换它:

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