Python线程调用后程序仍阻塞等待执行完成的问题排查
Python线程调用后程序仍阻塞等待执行完成的问题排查
嘿,我一眼就发现问题所在了!你线程启动的写法有个关键错误,导致根本没实现异步执行的效果。
看你代码里这一行:
threading.Thread(target=inicia_thread()).start()
你这里写的inicia_thread()是直接调用了函数,而不是把函数本身作为线程的目标任务。这就意味着,在创建线程之前,程序会先同步执行完inicia_thread()里的record.RecordDataCar(),等这个耗时的文件写入操作完全结束后,才会继续创建线程——但这时候线程的target已经是inicia_thread()执行后的返回值(通常是None),线程启动后其实什么都不会做,完全没起到异步的作用。
修正方法很简单:
把函数调用的括号去掉,直接传入函数对象给target参数:
threading.Thread(target=inicia_thread).start()
这样一来,线程会在启动后才去执行inicia_thread函数,主程序就不会被阻塞,可以继续往下处理其他逻辑了。
另外补充个小提醒:如果之后你的inicia_thread需要接收参数,别直接在括号里传参,要通过线程的args或kwargs参数来传递,比如:
# 假设inicia_thread需要两个参数a和b threading.Thread(target=inicia_thread, args=(a, b)).start()
最后再检查下,你代码里的record.RecordData(file_name='historico_PLA', data=data_meb)是同步调用的,如果这个文件写入操作也比较耗时,那这部分也会阻塞主程序,如果需要这部分也异步的话,同样可以把它放到另一个线程里执行。
备注:内容来源于stack exchange,提问作者Angelo Moura
相关产品推荐
相关产品推荐

