如果使用multiprocess在项目代码里面(没有单独放在main函数里)启动多进程,multiprocess在windows里的启动机制是spawn,会重新走一遍整个代码的main,此时如果是pyqt项目,就会再次实例化一个界面,这不是我们期盼的。通过查阅资料,可以在项目的main函数第一句加上multiprocess.freeze_support()
可以解决这个问题,但是尝试了,pyqt项目在启动多进程后直接闪退了,原因不清。
因此需要将启动multiporcess的代码单独放在脚本里,用自己main入口启动,单独打包,与主软件完全隔离。
如果使用pickle文件传参的话,里面的数据结构,例如类的实例等,涉及的module需要在load pickle的时候也导入,不然这些类的实例无法恢复。