线程提前执行
尽管没有调用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中文网其他相关文章!