Pyinstaller 多进程代码打包 exe 出现多个进程解决方案

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

Pyinstaller 多进程代码打包 exe 出现多个进程解决方案

在执行项目的根目录添加 multiprocessing_win.py

import os  
import sys  
import multiprocessing  
  

try:  
    
    if sys.platform.startswith('win'):  
        import multiprocessing.popen_spawn_win32 as forking  
    else:  
        import multiprocessing.popen_fork as forking  
except ImportError:  
    import multiprocessing.forking as forking  
  
if sys.platform.startswith('win'):  
    
    class _Popen(forking.Popen):  
        def __init__(self, *args, **kw):  
            if hasattr(sys, 'frozen'):  
                
                
                os.putenv('_MEIPASS2', sys._MEIPASS)  
            try:  
                super(_Popen, self).__init__(*args, **kw)  
            finally:  
                if hasattr(sys, 'frozen'):  
                    
                    
                    
                    
                    if hasattr(os, 'unsetenv'):  
                        os.unsetenv('_MEIPASS2')  
                    else:  
                        os.putenv('_MEIPASS2', '')  
  
    
    forking.Popen = _Popen   ​

在执行多进程代码 py 文件中添加

import multiprocessing_win
import multiprocessing

然后在 if __name__ == '__main__':的方法下面添加

multiprocessing.freeze_support()

实例如下:

import multiprocessing_win
import multiprocessing

if __name__ == '__main__':
    multiprocessing.freeze_support()
    app.run() 
    

参考文档
https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing