习惯用.ipynb文件,在VSCode中进行多进程编程是否存在弊端?
进程启动逻辑容易踩坑
Jupyter的内核本身是一个常驻的Python进程,用multiprocessing启动子进程时,尤其是Windows系统下的spawn模式,要求子进程能导入主模块里的代码。但Notebook的代码单元格不是标准模块结构,if __name__ == '__main__':的判断逻辑和普通.py文件完全不同,经常会出现找不到函数、触发AttributeError的情况。就算把代码拆成函数,有时候也得把核心逻辑单独写到.py文件里导入才能正常运行,反而增加了额外步骤。内核稳定性风险高
多进程会叠加占用系统内存和CPU,Notebook内核本身已经占了一份资源,子进程跑多了或者任务重了,很容易直接把内核搞崩溃——之前跑的所有单元格状态全丢,得从头再来。而且VSCode里重启Notebook内核有时候慢得离谱,耽误干活。调试和排障太麻烦
普通.py文件能用VSCode的调试器跟踪每个进程的执行,但Notebook里根本没法好好调试多进程。子进程的输出要么混在单元格里乱跳,要么直接不显示,出了bug你根本没法定位是哪个进程出问题。就算想打日志,也得额外写文件或者用特殊方式捕获,比在.py里调试麻烦十倍。代码复用性差
你在Notebook里写的多进程代码,要转成.py文件复用的时候,得拆单元格、调整__name__判断、整理导入语句,折腾半天。反过来,现成的.py多进程代码直接粘到Notebook里,大概率报错,还得花时间改适配,完全不如直接用.py文件省心。进程管理和输出混乱
多个子进程的打印输出会混在一起显示在单元格输出区,顺序乱、延迟高,你分不清哪条信息来自哪个进程。而且如果子进程没正常终止,关闭Notebook内核时经常没法彻底清理这些进程,后台留一堆僵尸进程占资源——到最后还是得开终端杀进程,违背了你不想碰终端的初衷。
内容的提问来源于stack exchange,提问作者Pixel_Bear

