2015-08-27 23 views
0

我正在研究一個相當大的現有Python應用程序,現在我正試圖減少它的內存使用量。
感謝memory_profiler我得到這個:導入python模塊需要太多內存

23 11.289 MiB 0.434 MiB from remote import settings 
24 14.422 MiB 3.133 MiB from remote.controller import ChannelManager 
25 14.422 MiB 0.000 MiB from remote import channel as channel_module 

正如你可以在24行3.13MB的內存使用率增加見。
爲什麼導入一個簡單的類(ChannelManager)應該使用這麼多的內存?
ChannelManager不是一個複雜的類,它只是包裝一些邏輯(產生一些進程和線程)。
謝謝

+0

沒有看到'ChannelManager'是什麼,很難說出發生了什麼。 –

+0

「遙控器」的包裝是什麼? –

+0

我無法在這裏粘貼代碼。 –

回答

4

除非這三個兆字節是一個問題,我會用我的時間分析應用程序本身有可能唾手可得在清理您的實際邏輯。

當你使用import模塊時,Python將該模塊編譯爲字節碼(通常被看作.pyc文件)並將其內容存儲到內存中。您正在導入的模塊(例如remote.controller.ChannelManager)可能會有許多行或引用的對象使其編譯後的表格佔用該空間量。

您的選擇是接受作爲使用ChannelManager對象的成本或選擇較小的模塊以降低使用率。我會大量推薦前者,並尋找使用更多內存的代碼部分 - 尤其是如果您使用Python 2.x,並且可以使用迭代器的區域。

0

from remote.controller import ChannelManager將導入整個remote.controller模塊到內存中,如果它尚未導入。因此ChannelManager可能根本就不是罪魁禍首。這可能是因爲remote.controller有一大堆依賴關係,當時沒有加載到內存中。

我也會在使用內存的地方自行剖析模塊。這很可能是一次性成本,這不值得嘗試優化。