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

发布于 2021-01-29 15:02:04

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

self.read无限期运行,因此该程序永远不会到达print终点。不打电话t1.start()怎么办?(即使我这样称呼,它也会开始运行并转到下一行,不是吗?)

关注者
0
被浏览
64
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    由于尾随的()target=self.read(),你正在运行self.read在错误的线程,在 当前 线程-而不是新线程你创建-并传递
    返回值
    的的self.read召唤为target的说法ThreadThread期望传递给函数以进行调用,因此只需删除括号并记住启动线程即可:

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

    虽然看出来,如果你选择的拉姆达-
    拉姆达将查找fab,并c在使用时,而不是在lambda被定义,因此如果您重新分配任何这些变量的线程调度之前可能会得到意想不到的结果(这可能即使您start立即致电,也要花任意时间)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看