You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:15:01