python 3 multiprocessing freeze_support() 是否将启动方法设置为生成?
does python 3 multiprocessing freeze_support() sets the starting method to spawn?
最近我在 Long 运行 的应用程序中遇到了一些冻结问题。
我的程序使用无限 while 循环不断检查 redis
数据库中的新进程,如果有任何工作要做,它将在后台生成一个新进程 运行 它。
所以我对它在 20 分钟(有时是 10 分钟)后冻结有疑问。我花了一个星期的时间才弄清楚问题是由于我的 while 循环之前缺少这一行引起的:
multiprocessing.set_start_method('spawn')
看起来 python 在 Windows 上不这样做,因为 windows 不支持 fork,所以它会卡住。
无论如何,这似乎可以解决我的问题,但我还有一个问题。
为了用 pyinstaller
之类的东西为这个程序创建一个 exe
文件,我需要添加另一行如下,以确保它不会在 exe 执行中冻结:
multiprocessing.freeze_support()
我想知道 freeze_support()
是否也会自动将启动方法设置为 'spawn'
?我的意思是我应该同时使用这两条线还是只 运行 其中一条就可以了?如果可以,我以后应该使用哪一个?
在 windows 的情况下,spawn 已经是默认方法,因此不需要 运行 set_start_method ('spawn') 行代码。
freeze_support () 是不同的东西,它不会影响启动方法的定义。您必须在这种情况下使用它来生成.exe。
最近我在 Long 运行 的应用程序中遇到了一些冻结问题。
我的程序使用无限 while 循环不断检查 redis
数据库中的新进程,如果有任何工作要做,它将在后台生成一个新进程 运行 它。
所以我对它在 20 分钟(有时是 10 分钟)后冻结有疑问。我花了一个星期的时间才弄清楚问题是由于我的 while 循环之前缺少这一行引起的:
multiprocessing.set_start_method('spawn')
看起来 python 在 Windows 上不这样做,因为 windows 不支持 fork,所以它会卡住。
无论如何,这似乎可以解决我的问题,但我还有一个问题。
为了用 pyinstaller
之类的东西为这个程序创建一个 exe
文件,我需要添加另一行如下,以确保它不会在 exe 执行中冻结:
multiprocessing.freeze_support()
我想知道 freeze_support()
是否也会自动将启动方法设置为 'spawn'
?我的意思是我应该同时使用这两条线还是只 运行 其中一条就可以了?如果可以,我以后应该使用哪一个?
在 windows 的情况下,spawn 已经是默认方法,因此不需要 运行 set_start_method ('spawn') 行代码。 freeze_support () 是不同的东西,它不会影响启动方法的定义。您必须在这种情况下使用它来生成.exe。