t1=threading.Thread(target=self.read())
print "something"
t2=threading.Thread(target=self.runChecks(), args=(self))
self.read
无限期运行,因此程序无法到达print
行。如果不致电t1.start()
,这怎么可能? (即使我打电话给它,它会开始运行并继续下一行,不应该吗?)
答案 0 :(得分:18)
您将self.read的结果传递给Thread的目标参数。线程期望传递一个函数来调用,所以只需删除括号并记住启动线程:
t1=threading.Thread(target=self.read)
t1.start()
print "something"
对于需要参数的目标,您可以使用args
的{{1}}和kwargs
参数,或者可以使用lambda。例如,要在线程中运行threading.Thread
,可以使用
f(a, b, x=c)
或
thread = threading.Thread(target=f, args=(a, b), kwargs={'x': c})
虽然注意你是否选择了lambda - lambda会在使用时查找thread = threading.Thread(target=lambda: f(a, b, x=c))
,f
,a
和b
,而不是{ {1}}已定义,因此如果在调度线程之前重新分配任何这些变量,可能会得到意外结果(即使您立即调用c
,也可能会花费任意长时间。)