如何在主代码运行时并行执行自定义函数,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
相关产品推荐
相关产品推荐

