线程在调用 Thread.start 之前开始运行
- 2024-12-30 08:41:00
- admin 原创
- 40
问题描述:
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
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD