0

如果我的問題的術語不完全正確,請原諒我;我不是一個專業程序員。我的守護線程爲什麼會暫停調用函數的執行?

這是我的守護線程調用函數:

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

控制檯輸出打印我的打印語句(:

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 

它是由代碼(全部在同一個班)被稱爲30秒睡眠被指定):

開始暫停

暫停控制檯

靜音

靜音

暫停守護線程開始

我期待的是 「暫停守護..」 之前 '靜音' 至少會出現..也就是說,線程啓動後主循環的執行會繼續。然而,在我看來,'cm.start()'必須在'print(「暫停守護進程線程啓動之前退出。」)'語句被執行?

我在做什麼錯誤或我的概念錯誤在哪裏?

(很難相信沒有人遇到過這一點,但我似乎無法找到在這裏類似的問題)

回答

1

因爲你的代碼立即調用目標函數在構造Thread對象。您應該將其替換爲以下內容:

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

非常感謝。這是有道理的。 –