如果我的问题的术语不太正确,请原谅我;我不是专业的程序员。
这是我的守护程序线程正在调用的函数:
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(“暂停守护程序线程启动。”)'语句执行之前退出?
我做错了什么或我的概念错误在哪里?
(很难相信之前没有人遇到过这个,但我似乎无法在这里找到类似的问题)
答案 0 :(得分:1)
因为您的代码在构造Thread
对象时会立即调用目标函数。您应该用以下内容替换它:
cm = threading.Thread(target=self._pause_console, args=(pausetime,))