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

如何在主代码运行时并行执行自定义函数,threading调用不生效如何解决?

核心问题修正方案

你代码里的几个错误直接导致了并行效果无法实现,对应修改方法如下:

  • 错误1:threading.Thread(target=explain())中给target参数传入的是explain()的执行返回值,定义线程时函数就已经在主线程同步执行完了,正确写法是传入函数对象本身,也就是target=explain,不要加括号。
  • 错误2:创建完线程立刻调用.join()会直接阻塞主线程,直到子线程执行完才会继续运行主线程逻辑,完全达不到并行效果,不需要等待子线程结束就不要调用该方法。
  • 错误3:直接调用.run()方法不会启动新线程,只是在当前主线程同步执行逻辑,和直接调用explain()没有区别,启动线程必须用.start()方法。
  • 注意点:你的代码运行在while True循环中,需要加判断控制同逻辑线程不要重复创建,避免线程泄露占用过多系统资源。

修正后可运行示例代码

import threading
import time
import keyboard

# 补充你代码里缺失的两个变量定义,可替换为实际内容
StillInBeta = "当前功能仍在测试阶段"
Reminder = "请谨慎操作"

def explain():
    Timer = 60
    keyboard.press("/")
    time.sleep(0.1)
    keyboard.write(StillInBeta)
    time.sleep(0.8)
    keyboard.press('enter')
    time.sleep(0.8)
    keyboard.press("/")
    time.sleep(0.1)
    keyboard.write(Reminder)
    time.sleep(0.8)
    keyboard.press('enter')
    time.sleep(0.1)
    for x in range(60):
        Timer = Timer - 1
        time.sleep(1)
        print(Timer)

# 线程启动标记,避免while循环重复创建线程
thread_started = False

while True:
    # 这里放你原本的主代码逻辑
    print("主代码正常运行中...")
    time.sleep(1)

    # 仅首次循环启动子线程
    if not thread_started:
        Explain_And_Remind = threading.Thread(target=explain)
        Explain_And_Remind.start()
        thread_started = True
    
    # 若需要子线程循环执行,可以加存活判断,结束后重置标记即可重新创建
    # if not Explain_And_Remind.is_alive():
    #     thread_started = False

内容的提问来源于stack exchange,提问作者Kreighstan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:45:03