最近我在长期运行中的应用程序中遇到了一些冻结。我的程序使用一个无限while循环来不断检查redis
db中的新进程,如果有任何作业要处理,它将生成一个新进程在后台运行。
所以我对它在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.