2011-05-15 24 views
8

Tengo miles de módulos personalizados (compilados para '.so') que me gustaría usar en python al mismo tiempo. Cada uno de dichos módulos tiene un tamaño promedio (100 [KB]).Python - ¿Límites en el número de importaciones?

Mi pregunta es, ¿hay algún límite en el número de importaciones en python? ¿Cuáles son las consecuencias de muchos imports? (por ejemplo, ¿esto requerirá mucha memoria)?

¿Puedo importar 10,000 módulos personalizados? 50,000 módulos?

+16

Mi buen Dios. No tengo idea de la respuesta, pero me encantaría saber qué te llevó a necesitar hacer la pregunta. –

+0

¿Cuántas importaciones está usando? ¿En qué punto comenzaste a notar algo diferente? – vpit3833

+1

¡excelente pregunta! pregunta como esta hacer uso pensar! –

Respuesta

3

CPython no tiene límite en el número de importaciones. Sin embargo, cada archivo .so se abrirá usando dlopen(), que está fuera del control de Python, al igual que la tabla de símbolos que debería seguir creciendo para recopilar información sobre sus módulos de extensión. Si esos tienen un límite práctico también está fuera del alcance de Python. CPython en sí mismo simplemente ocupa algo de memoria por módulo que importas, de modo que mientras tengas memoria suficiente, estarás bien.

+0

gracias. ¿Tiene una idea de lo que es la sobrecarga de cada '.so', cuando se importa? ¿La sobrecarga está correlacionada con el tamaño del archivo '.so' en el disco? o está separado (más pequeño, espero) del tamaño del '.so' en el disco? – user3262424

+0

¿Algún indicio de cuánta memoria toma 'CPython' por cada módulo importado? – user3262424

+0

La sobrecarga en Python es una cantidad fija por módulo, más más sobrecarga para lo que realmente es * en * el módulo. Depende en gran medida de la versión de Python y cómo fue construida y qué contienen realmente los módulos. Pruébalo y mira. –

9

Hay sin límite de Python en el número de importaciones en un módulo. Si hay un límite en una implementación en particular, es probablemente debido a los límites de recursos fuera del intérprete de Python.

7

La cantidad de memoria consumida por un único módulo importado va a ser menos tan grande como el tamaño del módulo en el disco. La sobrecarga es determinada tanto por el propio sistema operativo (para cargar un módulo dinámico) como por la sobrecarga de Python al importar un módulo.

Así que si su módulo tiene un tamaño promedio de 100kB, entonces la importación de 10000 de ellos ocupará el menos 1 GB de espacio de direcciones. Importación de 50000 de ellos se ejecutará más de 5 GB. Será mejor que use un sistema operativo con un espacio de direcciones de 64 bits.

+0

gracias por esta información, ¡esto ha sido extremadamente útil! – user3262424

Cuestiones relacionadas