我的 GUI 中有一个功能需要一段时间才能完成,因为它与另一个程序通信。由于我不想每次都等待它完成,然后再恢复使用 GUI,我想将此函数作为线程启动。
我试着这样做:
threading.Thread(target=self.Sweep, args=Input).start()
但它什么也没做,没有例外,没有结果。如果我正常启动该功能,它可以正常工作
self.Sweep(Input)
我在这里做错了什么?
我的 GUI 中有一个功能需要一段时间才能完成,因为它与另一个程序通信。由于我不想每次都等待它完成,然后再恢复使用 GUI,我想将此函数作为线程启动。
我试着这样做:
threading.Thread(target=self.Sweep, args=Input).start()
但它什么也没做,没有例外,没有结果。如果我正常启动该功能,它可以正常工作
self.Sweep(Input)
我在这里做错了什么?
在我看来,glglgl 是对的。
您应该为“args”传递一个元组或列表,例如args=[1]
而不是args=1
。发生的情况是,你启动你的线程,它立即死亡,因为它试图打开一个序列 - args - 你传递了一个序列以外的东西 - 并且TypeError
抛出了一个异常。
我对您的日志记录持怀疑态度 - 您应该已经看到了这个异常。
我不知道这是否足以解决问题,但至少,你应该让你的 args
args=(Input,)
为了将它与“直接”调用相匹配。
args
参数 forThread()
应该是一个包含函数所有参数的元组target
。因为你有一个参数,Input
你必须匹配这个元组来表示这个。