Python threading仅启动一个线程问题求助
问题解决:多线程并行运行循环函数
你的问题出在创建线程时的参数传递错误:
- 创建
threading.Thread时,target参数必须传入函数对象,而不是函数调用的结果。你写的target=PSG_main_function()会直接执行这个函数,进入它的while True死循环,导致程序卡在这一步,后续创建t2线程和启动线程的代码根本没机会执行。 - 另外你的函数定义没有参数,但
args=(1,)强行传了参数,即使程序能走到启动线程的步骤,也会触发参数不匹配的报错。
下面是修正后的代码:
import threading import time def PSG_main_function(): while True: # 替换成你的PySimpleGUI主逻辑 print("PySimpleGUI 运行中...") time.sleep(0.1) # 加延时减少CPU占用 def clock_function(): while True: # 替换成你的时间检查与执行逻辑 print("时间检查中...") time.sleep(1) # 每秒检查一次 if __name__ == "__main__": # target传入函数本身,不要加括号 t1 = threading.Thread(target=PSG_main_function) t2 = threading.Thread(target=clock_function) t1.start() t2.start() # 如果需要主线程等待子线程结束,可添加以下代码(无限循环场景下可选) # t1.join() # t2.join()
补充说明:
- 如果你的函数需要接收参数,再使用
args传递,比如def func(a, b):,对应写法是threading.Thread(target=func, args=(1, 2)) - 无限循环中加入
time.sleep()是必要的,避免单个线程占用过多CPU资源 - PySimpleGUI的主循环放在子线程中运行是可行的,但要确保GUI相关操作都在该线程内执行,避免跨线程操作导致的异常
内容的提问来源于stack exchange,提问作者Kaloian Kozlev
相关产品推荐
相关产品推荐

