2011-05-16 44 views
3

我有1000個自定義(編譯爲'.so')的模塊,我想在python的同一時間使用。每個這樣的模塊的大小(100 [KB])平均。Python - `.so`導入的開銷?

有沒有人知道每個.so導入的開銷是多少(在操作系統上 - 假設python沒有處理這個)?意思是開銷等於磁盤上.so文件的大小?或者它是一個固定的,不管.so文件的大小?

我還沒有到那裏,但會想知道什麼是對操作系統的影響,當一個人想要導入,一次說10,000-50,000自定義模塊。

+0

可能重複的[Python - 限制進口數量?](http://stackoverflow.com/questions/6012022/python-limits-on-number-of-imports) – sdolan 2011-05-16 00:05:34

+0

@sdolan:它不是重複;前者處理'.so'進口的實際數量;這個處理'.so'模塊的開銷。 – user3262424 2011-05-16 00:07:20

+0

你爲什麼一次導入所有的人?爲什麼不在需要之前導入它們?這是一般的python,或者,聽起來像,你擔心特定的操作系統? – 2011-05-16 00:08:17

回答

3

導入很多共享庫會有很大的時間開銷 - 動態鏈接器會在加載階段花費大量時間。動態鏈接器對數十到數百個共享對象進行了優化,而不是數千到數萬個。

如果可能,組合您的共享代碼對象。

但是,根據文件中的其他信息(DWARF調試符號,不需要額外的ELF部分等),一次加載的大小可能略小於一個磁盤大小。

+0

謝謝。那麼最好有一個巨大的'.so'文件,它可以將1000個'.so'模塊連接在一起?如果一個輸入表示10000'.so',或者如果輸入一個由這10000個單獨的'.so'文件組成的巨大'.so',開銷是相同的嗎? – user3262424 2011-05-16 00:08:52

+0

@user:擁有更多的.so文件會有額外的開銷(更多的記錄用於加載和類似的內存)。還有更多的時間涉及(鏈接器啓動1000次或一次),主要是重複的符號(Python調用,OS調用等)。 – 2011-05-16 00:26:51

+0

謝謝。如果只導入模塊功能的一部分而不導入全部功能,它有幫助嗎?例如,而不是'輸入Y',我會'從Y輸入X1,X2,X3 ....';它會在資源方面有所幫助/更經濟嗎? – user3262424 2011-05-16 00:41:47