Gzip con Python 2.7–3.x
Hace poco estuve
pensando sobre la manera
en que aprendemos a llevar a cabo las tareas de administración de un
servidor GNU/Linux, el cual nos brinda un sin fin de comandos para el
día a día. Lo primero que aprendemos es a realizarlas desde una
terminal, claro, siempre y cuando el esfuerzo sea humanamente
alcanzable. Lo segundo, es la automatización vía bash scripting,
con la cual resolvemos todo aquello que no estamos dispuestos a
realizar frecuentemente.
En mi eterna
necesidad de aprender nuevas habilidades y ponerlas en marcha lo
antes posible, contemplé la viabilidad de hacer las mismas
automatizaciones desde una perspectiva más enfocada a la
programación en Python. Esto por dos razones:
* Sentirme más
cómodo con la sintaxis y librerías de Python. En efecto, quiero
aprender, mejorar y dominar este lenguaje (y pensamiento de
programador sin llegar a ser uno).
* Ayudar a mi
cerebro a que pueda resolver problemas obvios con diferentes
alternativas.
Así que llegó la
primer oportunidad, comprimir archivos de log y binarios según los
parámetros establecidos. Sin duda la tarea ideal; por un lado nada
compleja, por el otro, suficiente para tirar unas cuantas líneas de
código.
Lo primero que hice
fue probar mi local, claro, como contención de posibles daños. Como
tampoco es que no tenga nociones de programación, armé mi ambiente
con la última versión de Python (3.6 en este momento). Después
probé en la 2.7 y en la 2.6, no funcionando en ésta última con los
archivos binarios.
import
gzip
import
shutil
import
sys
import
os
try:
for
s_file in sys.argv[1:]:
print(“Args:
{}”.format(s_file))
file_in
= open(s_file, ‘rb’)
gzip_file
= gzip.open(s_file+’.gz’, ‘wb’)
shutil.copyfileobj(file_in,
gzip_file)
gzip_file.close()
file_in.close()
os.remove(s_file)
print(“Successful”)
except
Exception as ex:
print(ex)
Y cómo no podía
ser de otra manera, lo pensé para recibir más de un archivo al
mismo tiempo.
Este primer
procedimiento me dio una segunda idea, la cual no he probado, pero no
tardo en hacerlo.
¿Qué pasa si lo
realizo con hilos?
A priori puedo
pensar en algunos factores:
No requiero que sea
thread-safe, porque cada hilo trabajará sobre un archivo distinto,
por tanto, no hay problemas de bloqueo o modificación de variables
que puedan derivar en un comportamiento inesperado y errático.
Los hilos son
ideales para I/O (con sus respectivas excepciones).
Puede incrementarse
el consumo de CPU, por tanto, debo ser cuidadoso de probarlo
suficientemente para no impactar servidores productivos, produciendo
inanición de recursos y llamadas telefónicas del cliente lanzando
fuego por la boca.
En cuanto tenga los
resultados los agregaré como una actualización.
Comentarios
Publicar un comentario