线程开始调用Thread.start前运行(thread starts running before

2019-06-17 14:45发布

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

self.read将无限期运行,所以程序永远不会到达print线。 这怎么可能不调用t1.start() (即使我称呼它,是它shold开始运行,并继续到下一行,不应该吗?)

Answer 1:

你传递self.read的结果线程的目标参数。 螺纹预计要传递一个函数来调用,所以只是删除括号,并记得启动线程:

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))

虽然看出来,如果你选择的拉姆达-拉姆达将查找fabc在使用时,不能当lambda的定义,因此如果您的线程之前重新分配所有这些变量可以得到意想不到的结果定(这可能需要任意长,即使调用start立即)。



文章来源: thread starts running before calling Thread.start