事情是这样的,在去年的时候第一次接触yolo v8,尝试着做出了自己的数据集和模型,但是当我把模型部署到我的gui应用上面的时候出现了一个非常离谱的问题:当我使用识别功能的时候我的开始程序竟然再次被运行了,当我在新打开的程序里面去进行识别的时候离谱的情况再次发生,竟然又又又打开了一个新的程序,当我关闭新打开的程序之后,识别功能才正常运行,于是乎我向广大网友求助,却一直没有结果,随着项目的搁置渐渐被遗忘了,直到最近,我在使用python多进程的时候再次遇到了这个问题.
简单分析一下:首先程序是以进程为单位的,通常一个程序为一个进程,但是有多个线程去处理不同的任务,但是有时候单个进程并不能满足需求,这时候不得不创建多进程,多进程的程序再被打包后,会出现类似于循环导入的情况,进程a为主进程进程b为子进程,当使用进程b的时候,因为进程b依赖于进程a所有会再次启动进程a,这样就出现了套娃的现象。
解决方法如下:
from multiprocessing import freeze_support # 从multiprocessing 导入freeze_support
def main():
pass # 此处省略,替换成你的主程序
if __name__ == "__main__":
freeze_support()
main()
在程序入口出执行freeze_support()就可以完美解决多进程打包后异常套娃问题了
同理yolo v8模型识别应该也是打开了一个新的进程进行识别的,所以在打包过程中会出现套娃问题,加上freeze_support()就可以完美解决