2013-04-17 139 views
0

我正在使用multiprocessing包生成執行函數的多個進程,例如func(使用不同的參數)。 func進口numpy包,我想知道每個進程是否會導入包。實際上,主線程或主流程也會導入numpy,並且可以在不同func之間輕鬆共享執行進程。在Python進程之間共享導入

由於多次導入庫會導致性能下降。

回答

3

我想知道每個進程是否會導入包。

假設導入過程發生後,然後,是的。雖然你可以通過在fork之前進行導入來避免這種情況。

由於多次導入庫會導致性能下降。

那麼,如果你在fork之後進行導入,性能會受到影響,但可能不是「主要」之一。操作系統很可能在其緩存中包含所有必需的文件,因此它只能從RAM讀取,而不能讀取磁盤。

更新

就注意到了這一點......

事實上,主線程,或者更確切地說,主要工藝也進口numpy ...

如果你在分叉之前已經導入numpy,那麼子流程中的導入只會創建對現有導入模塊的引用。這應該不到一毫秒,所以我不會擔心它。

+0

我不確定'multiprocessing'產生的進程是否是主進程的子進程。我一直認爲他們是與主流程溝通的不同流程。在這種情況下,他們每個人都有自己的Python解釋器,並且需要單獨導入庫。 – abhinavkulkarni

+0

@abhinavkulkarni您正在使用哪種操作系統? – Aya

+0

'Ubuntu 12.10'。 – abhinavkulkarni