Python 3.9.13多线程问题:键盘控制程序线程无法并行运行
解决键盘控制程序多线程并行运行问题
问题的核心错误是创建线程时直接调用了函数,而非将函数对象传递给Thread的target参数。你当前的写法会先在主线程中执行KILL(),直到该函数执行完毕才会继续创建下一个线程,自然无法实现并行。
修正后的代码
import ctypes import sys import keyboard from threading import Thread def KILL(): print("press q to end program") keyboard.wait('q') print("Exited") # 子线程调用sys.exit()仅终止当前子线程,若需终止整个程序可改用os._exit()(需导入os) sys.exit() def Primary(): print("secondary thread") keyboard.wait('w') print("ending program") if __name__ == '__main__': # 关键改动:去掉函数后的括号,直接传递函数对象给target Thread(target=KILL).start() Thread(target=Primary).start()
改动说明
- 当你写
target=KILL()时,Python会立即执行KILL()函数,并将函数的返回值(此处为None)传给target参数,线程并未执行你期望的逻辑。正确写法是target=KILL,直接传递函数本身,让线程去调用它。 - 额外注意:子线程中调用
sys.exit()只会终止当前子线程,不会结束整个程序。如果需要完全终止程序,可以导入os模块后使用os._exit(0),或者设置全局终止标志,让所有线程检测标志后自行退出。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

