我正在使用multiprocessing
包来生成执行函数的多个进程,比如func
(使用不同的参数)。 func
导入numpy
包,我想知道每个进程是否都会导入包。事实上,主线程,或者更确切地说主进程也导入numpy
,并且可以在不同的func
执行进程之间轻松共享。
由于多次导入库,会有重大的性能损失。
答案 0 :(得分:3)
我想知道每个进程是否都会导入包。
假设在您分叉过程之后进行导入,那么,是的。但是,您可以通过在fork之前执行导入来避免这种情况。
由于多次导入库,会有重大的性能损失。
好吧,如果你在fork之后进行导入会有性能损失,但可能不是" major"一。操作系统很可能在其缓存中包含所有必需的文件,因此它只能从RAM而不是磁盘读取。
<强>更新强>
刚刚注意到这一点......
实际上,主线程,或者说主流程也导入
numpy
...
如果您在分叉之前已经导入numpy
,那么子流程中的导入将仅创建对现有导入模块的引用。这应该不到一毫秒,所以我不担心。