pyinstaller: 我的cherrypy应用exe执行了两个实例

7 投票
2 回答
1853 浏览
提问于 2025-04-15 18:23

我有一个用cherrypy做的应用程序,我用pyinstaller把它打包成了一个exe文件。现在当我运行这个exe时,它会在内存中加载两次。打开任务管理器可以看到,第一个实例大约占用1KB内存,然后过了一秒钟,第二个实例又加载进来,大约占用3KB内存。如果我关闭占用内存较大的那个,两个进程都会结束。如果我关闭占用内存较小的那个,只有它会结束。

如果我用subprocess来加载这个exe,当我尝试用proc.kill()去结束进程时,只能结束那个占用内存较小的进程,另一个仍然在内存中运行。这是因为cherrypy和pyinstaller一起使用造成的副作用吗?

2 个回答

1

首先,知道你使用的是哪个版本的CherryPy是很重要的。2.x版本的设计有点问题:它的自动重载功能总是会启动第二个CherryPy实例,这样第一个实例在被关闭时可以重新启动这个子实例。这个问题在3.x版本中得到了修复,现在只使用一个进程。如果你在用2.x版本,记得通过配置选项关闭自动重载功能:

[global]
autoreload.on = False
6

PyInstaller在启动的时候会创建一个子进程。这个过程在它的手册中有详细说明,具体可以查看这一部分

撰写回答