執行緒提前執行
儘管沒有呼叫t1.start(),為什麼t1會在後續列印語句之前開始執行?
分析
由於 Python 預設的參數傳遞語義,t1 的目標定義中 self.read() 後面存在括號會觸發過早執行。透過省略括號,self.read 將作為函數引用而不是執行結果傳遞。
解
為了確保正確執行,請刪除尾隨括號from self.read():
# Remove parentheses to pass a function reference t1 = threading.Thread(target=self.read) t1.start() print("something")
對於需要參數的目標,使用args 和kwargs 或lambda 函數:
# Using args and kwargs (preferred) t1 = threading.Thread(target=f, args=(a, b), kwargs={'x': c}) # Using a lambda function (watch for variable reassignment issues) t1 = threading.Thread(target=lambda: f(a, b, x=c))
以上是為什麼我的執行緒在列印語句之前執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!