Python 3.6.5启动后台线程后主线程阻塞问题求助
问题分析与解决
哦,我一眼就发现问题所在了!你的代码在创建线程时犯了一个非常典型的错误,直接导致主线程被卡死在后台线程的调用里,根本没机会执行后面的代码。
错误原因
你写的线程创建代码是这样的:
threading.Thread(bgthread()).start()
这里的bgthread()是直接调用了这个函数,而不是把函数对象传给线程的target参数。因为bgthread()里面是一个while True的死循环,所以程序一运行就会进入这个死循环,永远停在这里,完全到不了下面打印FG works的代码块。
修正后的代码
只需要把线程创建的方式改对,把函数对象传给target参数即可:
import sys import time import threading def bgthread(): while True: print('BG works') sys.stdout.flush() time.sleep(1) # 正确的线程创建方式:传入函数对象给target参数 threading.Thread(target=bgthread).start() while True: print('FG works') sys.stdout.flush() time.sleep(1)
额外建议
如果希望主线程退出时后台线程也能自动结束,可以给线程设置daemon=True,这样主线程结束后,后台线程会被强制终止:
threading.Thread(target=bgthread, daemon=True).start()
这样修改后,后台线程和主线程就会并行运行,你就能同时看到BG works和FG works的输出啦!
内容的提问来源于stack exchange,提问作者gamesguru
相关产品推荐
相关产品推荐

