线程在调用Thread.start之前开始运行
t1=threading.Thread(target=self.read())
print("something")
t2=threading.Thread(target=self.runChecks(), args=(self,))
self.read
无限期运行,因此该程序永远不会到达print
终点。不打电话t1.start()
怎么办?(即使我这样称呼,它也会开始运行并转到下一行,不是吗?)
-
由于尾随的
()
对target=self.read()
,你正在运行self.read
在错误的线程,在 当前 线程-而不是新线程你创建-并传递
返回值
的的self.read
召唤为target
的说法Thread
。Thread
期望传递给函数以进行调用,因此只需删除括号并记住启动线程即可:t1=threading.Thread(target=self.read) t1.start() print("something")
对于需要参数的目标,可以使用
args
和的kwargs
参数threading.Thread
,也可以使用lambda。例如,要f(a, b, x=c)
在线程中运行,可以使用thread = threading.Thread(target=f, args=(a, b), kwargs={'x': c})
要么
thread = threading.Thread(target=lambda: f(a, b, x=c))
虽然看出来,如果你选择的拉姆达-
拉姆达将查找f
,a
,b
,并c
在使用时,而不是在lambda
被定义,因此如果您重新分配任何这些变量的线程调度之前可能会得到意想不到的结果(这可能即使您start
立即致电,也要花任意时间)。