Python多线程基础问题:Thread创建的线程未并行执行原因排查
Python多线程未并行执行问题原因
你对Thread类的传参规则理解有误:
- 创建
Thread实例时,target参数需要接收可调用对象本身,你写的target=function('thr1.txt')是直接在主线程中执行了function函数,把函数的返回值(该函数无返回值,实际传入的是None)传给了target。因此还未调用start()方法,两个函数就已经在主线程按顺序执行完成,自然不会出现并行效果。
修复代码
将函数参数通过Thread的args参数传递即可,修改后的主线程逻辑如下:
if __name__ == '__main__': # target传入函数本身,不加括号,参数放到args元组中 thr1 = Thread(target=function, args=('thr1.txt',)) thr2 = Thread(target=function, args=('thr2.txt',)) thr1.start() thr2.start() # 若需要等待所有子线程执行完毕再结束主线程,可添加如下join代码 thr1.join() thr2.join()
注意:
args接收的是元组类型,若仅传入1个参数,末尾需要加逗号,避免被Python解析为普通字符串而非元组。
效果验证
修改后运行代码,会看到两个文件的打印输出交替出现,说明两个线程已经并行执行,内容也会同时写入两个目标文件。
内容的提问来源于stack exchange,提问作者Cameron
相关产品推荐
相关产品推荐

