2011-05-15 57 views
8

我有1000个自定义(编译为'.so')的模块,我想在python的同一时间使用。每个这样的模块的大小(100 [KB])平均。Python - 限制进口数量?

我的问题是,在python的进口数量是否有限制?许多imports有什么后果? (例如,这是否需要大量内存)?

我可以导入10,000个自定义模块吗? 50,000个模块?

+16

我的上帝。我不知道答案,但我很想知道是什么让你需要问这个问题。 – 2011-05-15 23:47:48

+0

您使用多少个进口?你在什么时候开始注意到一些不同的东西? – vpit3833 2011-05-15 23:50:48

+1

优秀的问题!这样的问题使用思考! – 2011-05-15 23:53:19

回答

3

CPython对进口数量没有限制。但是,每个.so文件都将使用dlopen()打开,该文件不在Python的控制范围之内 - 因为符号表需要不断增长才能收集有关扩展模块的信息。这些是否具有实际限制也超出了Python的范围。 CPython本身只会占用你导入的每个模块的一些内存,所以只要你有足够的内存,你应该没问题。

+0

谢谢。你有什么想法,当导入时每个'.so'的开销是多少?是与磁盘上'.so'文件大小相关的开销?还是它是单独的(我希望更小)到磁盘上'.so'的大小? – user3262424 2011-05-15 23:51:51

+0

有关每个导入的模块使用“CPython”占用多少内存的提示? – user3262424 2011-05-16 00:02:57

+0

Python中的开销是每个模块的固定数量,加上模块中实际*的开销。它很大程度上取决于Python版本以及它是如何构建的以及模块实际包含的内容。试试看看。 – 2011-05-16 14:52:59

9

还有对于模块中的进口数量没有Python限制。如果任何特定实现有限制,可能是因为Python解释器之外的资源限制。

7

单个导入模块消耗的内存量将至少为至少,与磁盘上模块的大小一样大。开销取决于操作系统本身(用于加载动态模块)和Python在导入模块时的开销。

因此,如果您的模块平均大小为100kB,那么导入10000个模块将占用至少 1 GB的地址空间。导入50000个将超过5 GB。您最好使用具有64位地址空间的操作系统。

+0

感谢您提供此信息 - 这非常有帮助! – user3262424 2011-05-16 00:10:57