Python threading线程启动问题:为何打印线程未执行?
Python threading 线程未执行问题分析
你的代码存在两个核心问题,导致info线程无法按预期运行:
1. Thread的target参数传递错误
创建线程时,target需要传入函数对象(仅写函数名,不带括号),而不是函数调用的结果(带括号会直接触发函数执行)。
看这段代码:
keyboard_listening = Thread(target=key_pressed())
这里key_pressed()会被立即执行,而非交给新线程运行。由于key_pressed内部有持续循环的while逻辑,程序会直接卡在这个函数里,后续创建info线程、调用info.start()的代码根本没机会执行。
正确写法:
keyboard_listening = Thread(target=key_pressed)
2. 带参数的线程函数传递方式错误
再看info线程的创建代码:
info = Thread(target=print("After thread"))
这里同样犯了"立即执行函数"的错误——print("After thread")会在创建线程时直接打印内容,而非由新线程执行。如果要给target函数传递参数,需要通过args或kwargs参数单独传入:
正确写法:
info = Thread(target=print, args=("After thread",))
注意args是元组格式,哪怕只有一个参数,也要加上结尾的逗号。
修正后的完整代码示例
from threading import Thread import time def key_pressed(): while True: print("监听按键中...") time.sleep(1) print("Waiting for key...") keyboard_listening = Thread(target=key_pressed) info = Thread(target=print, args=("After thread",)) keyboard_listening.start() info.start()
内容的提问来源于stack exchange,提问作者Ziv Sion
相关产品推荐
相关产品推荐

