Python: siga un archivo de registro y compare las funciones de cola de bloqueo y no bloqueo
-
Descripción general de la función
tail()
de Python - Seguir un archivo de registro en Python
-
Funciones de bloqueo vs no bloqueo
Tail()
en Python - Archivo de registro para los ejemplos anteriores
El tutorial de hoy proporciona una descripción general de la función tail()
en Python que conduce a su funcionamiento y demostración de cómo rastrear un archivo de registro.
También compara las funciones de cola de bloqueo y no bloqueo de Python y destaca las diferencias.
Descripción general de la función tail()
de Python
En Python, las últimas cinco filas del marco de datos se muestran por defecto cuando se usa la función tail()
. Solo hay un parámetro de entrada, que es el número de filas.
Esta opción nos permite mostrar una cantidad específica de filas. Además, la función tail()
también acepta un número negativo, como se muestra en el siguiente ejemplo.
En tal situación, se devuelven todas las filas pero no las primeras filas. La distinción principal entre head()
y tail()
es que, cuando se pasan parámetros vacíos, tanto head()
como tail()
devuelven cinco filas.
Recuerda que las funciones head()
y tail()
producen datos ordenados, mientras que sample()
produce datos desordenados.
Sintaxis de la función tail()
:
dataframe.tail(n=5)
Funcionamiento de la función Tail()
en Python
Si le pasamos el valor negativo de n
a la función tail()
, excluirá la primera n
(ver el siguiente ejemplo).
Cuando ejecutamos print(df.tail(2))
, muestra las dos últimas filas, y cuando ejecutamos print(df.tail(-6))
, muestra todas las filas excepto las primeras 6.
Código de ejemplo:
import pandas as pd
df = pd.DataFrame(
{
"Colours": [
"Purple",
"White",
"Black",
"Brown",
"Pink",
"Orange",
"Blue",
"Red",
"Yellow",
]
}
)
print("Complete Data Frame:")
print(df)
print("When we pass the value of `n`:")
print(df.tail(2))
print("\nWhen we pass the -ve value of `n`:")
print(df.tail(-6))
Producción :
Complete Data Frame:
Colours
0 Purple
1 White
2 Black
3 Brown
4 Pink
5 Orange
6 Blue
7 Red
8 Yellow
When we pass the value of `n`:
Colours
7 Red
8 Yellow
When we pass the -ve value of `n`:
Colours
6 Blue
7 Red
8 Yellow
Seguir un archivo de registro en Python
Hemos creado un archivo de registro llamado std.log
en el que hemos almacenado algunos datos, que veremos en el resultado a continuación. Para seguir un archivo de registro, podemos ejecutar la cola desde el módulo sh
.
Para realizar un ciclo infinito y mostrar la línea de salida, llamamos a tail()
con el nombre del archivo y _iter
configurado en True
.
Código de ejemplo:
from sh import tail
for line in tail("-f", "std.log", _iter=True):
print(line)
Producción :
2022-08-25 21:44:10,045 This is just a reminder
2022-08-25 21:44:10,046 Meeting is at 2 pm
2022-08-25 21:44:10,046 After the lunch break
Funciones de bloqueo vs no bloqueo Tail()
en Python
Comencemos con la función tail()
sin bloqueo.
Función Tail()
sin bloqueo
Cuando una función está bloqueada, potencialmente puede posponer la finalización de actividades posteriores. Además, podemos sufrir el rendimiento general del sistema.
En otras palabras, su programa bloqueará y evitará que se ejecute cualquier otra cosa. Para iniciar el subproceso
y conectarse a su flujo de salida, estamos utilizando el módulo subproceso
(stdout
).
Código de ejemplo:
import subprocess
import select
import time
f = subprocess.Popen(
["tail", "-F", "log.txt"], stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
p = select.poll()
p.register(f.stdout)
while True:
if p.poll(1):
print(f.stdout.readline())
time.sleep(1)
Producción :
b'2022-08-25 21:44:10,045 This is just a reminder\n'
Función de bloqueo Tail()
El siguiente código también mostrará nuevas líneas a medida que se agregan, pero puede utilizar el módulo subproceso
sin las llamadas adicionales al módulo seleccionar
. Se bloquea hasta que el programa final finaliza con el comando f.kill()
.
Código de ejemplo:
import subprocess
f = subprocess.Popen(
["tail", "-F", "log.txt"], stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
while True:
line = f.stdout.readline()
print(line)
Producción :
b'2022-08-25 21:44:10,045 This is just a reminder\\n'
b'2022-08-25 21:44:10,046 Meeting is at 2 pm\\n'
Archivo de registro para los ejemplos anteriores
El siguiente código es para crear log.txt
, que luego se usa en el código de bloqueo y no bloqueo.
Código de ejemplo:
import logging
logging.basicConfig(filename="log.txt", level=logging.DEBUG,
format="%(asctime)s %(message)s")
logging.debug("This is just a reminder")
logging.info("Meeting is at 2 pm")
logging.info("After the lunch break")
Producción :
2022-08-25 21:44:10,045 This is just a reminder
2022-08-25 21:44:10,046 Meeting is at 2 pm
2022-08-25 21:44:10,046 After the lunch break
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn