Si bien ha recibido buenas respuestas, parece que nadie ha respondido esta parte de su pregunta (como suele ocurrir cuando hace muchas preguntas en una pregunta; -) ...:
respecto a las preocupaciones de tamaño de archivo, a lo tamaño máximo de esta solución debe ser limitada ?. Y por qué ?
Lo más importante es, la cantidad de RAM física puede este proceso específico de Python en realidad uso (lo que se conoce como un "conjunto de trabajo"), sin penalizar indebidamente otros aspectos del rendimiento del sistema en general. Si excede la RAM física para su "conjunto de trabajo", estará paginating e intercambiando dentro y fuera del disco, y su rendimiento puede degradarse rápidamente (hasta un estado conocido como "thrashing"), básicamente, todos los ciclos disponibles van a la tareas de entrada y salida de páginas, y cantidades insignificantes de trabajo real realmente pueden hacerse).
De ese total, una cantidad razonablemente modesta (digamos unos pocos MB como máximo, en general) probablemente se utilizará con código ejecutable (archivos ejecutables propios de Python, DLL o .so) y bytecode y soporte general las estructuras de datos que se necesitan activamente en la memoria; en una máquina moderna típica que no está haciendo otras tareas importantes o urgentes, casi puede ignorar esta sobrecarga en comparación con los gigabytes de RAM que tiene disponibles en general (aunque la situación podría ser diferente en los sistemas integrados, etc.).
Todo lo demás está disponible para sus datos, que incluye este archivo que está leyendo en la memoria, así como cualquier otra estructura de datos significativa. Las "modificaciones" de los datos del archivo normalmente pueden tomar (transitoriamente) el doble de memoria que el tamaño del contenido del archivo (si lo mantiene en una cadena); más, por supuesto, si está guardando una copia del datos antiguos, así como hacer nuevas copias/versiones modificadas.
Por lo tanto, para el uso de "solo lectura" en una máquina moderna típica de 32 bits con, digamos, 2GB de RAM en general, leer en la memoria (digamos) 1.5 GB no debería ser un problema; pero tendrá que ser sustancialmente menor a 1 GB si está haciendo "modificaciones" (¡y aún menos si tiene otras estructuras de datos importantes en la memoria!). Por supuesto, en un servidor dedicado con una versión de 64 bits de Python, un sistema operativo de 64 bits y 16 GB de RAM, los límites prácticos antes eran muy diferentes, más o menos en proporción a la cantidad muy diferente de RAM disponible de hecho.
Por ejemplo, el texto de la Biblia King James como descargable here (descomprimido) es de aproximadamente 4.4 MB; entonces, en una máquina con 2 GB de RAM, puede guardar alrededor de 400 copias ligeramente modificadas en la memoria (si nada más está solicitando memoria), pero, en una máquina con 16 GB de RAM (disponible y direccionable), podría mantén bien más de 3000 de esas copias.
ver mis otros comentarios, spam mensajes de edad con respuestas duplicadas no es constructivo. – Kev