线程在调用 Thread.start 之前开始运行
- 2024-12-30 08:41:00
- admin 原创
- 100
问题描述:
t1=threading.Thread(target=self.read())
print("something")
t2=threading.Thread(target=self.runChecks(), args=(self,))
self.read
无限期运行,因此程序永远不会到达该print
行。如果不调用,这怎么可能呢t1.start()
?(即使我调用它,它也应该开始运行并继续下一行,不是吗?)
另请参阅:如果在函数调用中省略括号(假设不需要参数),则意味着什么?以更深入地了解该错误,并参阅 Python 参数绑定以获得更通用的解决方案。
解决方案 1:
由于 的尾随()
,您在错误的线程中target=self.read()
运行,即当前线程(而不是您正在创建的新线程),并且将调用的返回值作为的参数传递。期望传递一个要调用的函数,因此只需删除括号并记住启动线程:self.read
`self.readtarget
Thread`Thread
t1=threading.Thread(target=self.read)
t1.start()
print("something")
对于需要参数的目标,您可以使用args
和kwargs
参数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
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD