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

2024-10-01 15:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

self.read无限期运行,因此程序永远不会到达print行。如果不调用t1.start(),这怎么可能呢?(即使我叫它,它也应该开始运行并继续下一行,不是吗?)


Tags: self程序targetreadargsthreadstartsomething
1条回答
网友
1楼 · 发布于 2024-10-01 15:37:09

由于target=self.read()上的尾随(),您在错误的线程中运行self.read,当前的线程-而不是您正在创建的新线程-并将self.read调用的返回值作为Threadtarget参数传递Thread希望传递一个要调用的函数,所以只需删除括号并记住启动线程:

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将在使用时查找fabc,而不是在定义lambda时,因此如果在调度线程之前重新分配这些变量中的任何一个,您可能会得到意外的结果(这可能需要任意长的时间,即使您立即调用start).

相关问题 更多 >

    热门问题