为什么我的守护进程线程会暂停调用函数的执行?
Why is my Daemon thread pausing the calling function's execution?
如果我的问题的术语不太正确,请原谅我;我不是专业的程序员。
这是我的守护线程正在调用的函数:
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
由这段代码调用(都在同一个class):
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 秒睡眠):
starting pause
pausing console
muted
unmuted
pause daemon thread started
我期待“暂停守护进程..”至少会在 'unmuted' 之前出现...即,主循环执行将在线程启动后继续。但是,(在我看来)'cm.start()' 必须在执行 'print("pause daemon thread started.")' 语句之前退出?
我做错了什么或者我的概念错误在哪里?
(很难相信以前没有人遇到过这个问题,但我在这里似乎找不到类似的问题)
因为您的代码在构造 Thread
对象时会立即调用目标函数。您应该将其替换为以下内容:
cm = threading.Thread(target=self._pause_console, args=(pausetime,))
如果我的问题的术语不太正确,请原谅我;我不是专业的程序员。
这是我的守护线程正在调用的函数:
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
由这段代码调用(都在同一个class):
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 秒睡眠):
starting pause
pausing console
muted
unmuted
pause daemon thread started
我期待“暂停守护进程..”至少会在 'unmuted' 之前出现...即,主循环执行将在线程启动后继续。但是,(在我看来)'cm.start()' 必须在执行 'print("pause daemon thread started.")' 语句之前退出?
我做错了什么或者我的概念错误在哪里?
(很难相信以前没有人遇到过这个问题,但我在这里似乎找不到类似的问题)
因为您的代码在构造 Thread
对象时会立即调用目标函数。您应该将其替换为以下内容:
cm = threading.Thread(target=self._pause_console, args=(pausetime,))