gpt4 book ai didi

python - 线程在调用 Thread.start 之前开始运行

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:19 24 4
gpt4 key购买 nike

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

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

<小时/>

另请参阅:What does it mean when the parentheses are omitted from a function call (supposing no arguments are necessary)?为了更深入地了解该错误,以及 Python Argument Binders以获得更通用的解决方案。

最佳答案

因为尾随 ()关于target=self.read() ,您正在运行 self.read在错误的线程中,当前线程(而不是您正在创建的新线程)传递 self.read返回值调用target Thread 的参数。 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 会查找 f , a , b ,和c在使用时,而不是在 lambda 时已定义,因此如果您在调度线程之前重新分配这些变量中的任何一个,则可能会得到意外的结果(这可能需要任意长的时间,即使您立即调用 start )。

关于python - 线程在调用 Thread.start 之前开始运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53457440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com