线程在调用Thread.start之前开始运行

时间:2012-08-03 09:05:36

标签: python multithreading python-multithreading

t1=threading.Thread(target=self.read())
print "something"
t2=threading.Thread(target=self.runChecks(), args=(self))

self.read无限期运行,因此程序无法到达print行。如果不致电t1.start(),这怎么可能? (即使我打电话给它,它会开始运行并继续下一行,不应该吗?)

1 个答案:

答案 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)) fab,而不是{ {1}}已定义,因此如果在调度线程之前重新分配任何这些变量,可能会得到意外结果(即使您立即调用c,也可能会花费任意长时间。)

相关问题