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

self.read无限期地运行,所以程序永远不会到达这print条线。不打电话怎么可能t1.start()?(即使我这么叫,它也应该开始运行并继续下一行,不是吗?)

4

1 回答 1

41

由于. ()_ target=self.read()_ self.read_ _ _ _ _ self.read_ target_ 期望传递一个函数来调用,所以只需删除括号并记住启动线程:ThreadThread

t1=threading.Thread(target=self.read)
t1.start()
print("something")

对于需要参数的目标,您可以使用argskwargs参数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))

但请注意,如果您选择 lambda - lambda 将在使用时查找f, a, b, 和c在使用时,而不是在lambda定义时,因此如果您在安排线程之前重新分配这些变量中的任何一个,您可能会得到意想不到的结果(这可能花费任意长的时间,即使你start立即打电话)。

于 2012-08-03T09:10:43.970 回答