【问题标题】:thread starts running before calling Thread.start线程在调用 Thread.start 之前开始运行
【发布时间】:2012-08-01 07:40:16
【问题描述】:
t1=threading.Thread(target=self.read())
print("something")
t2=threading.Thread(target=self.runChecks(), args=(self,))

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

【问题讨论】:

    标签: python multithreading python-multithreading


    【解决方案1】:

    由于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 也可能花费任意时间)。

    【讨论】:

    • 你是救生员
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多