python 3 multiprocessing freeze_support()是否将启动方法设置为派生



最近我在长期运行中的应用程序中遇到了一些冻结。我的程序使用一个无限while循环来不断检查redisdb中的新进程,如果有任何作业要处理,它将生成一个新进程在后台运行。

所以我对它在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'(行代码。冷冻_支持((是另一回事,它不会影响启动方法的定义。您必须在此场景中使用它来生成.exe.

最新更新