[Python-es] Insertar registros cada segundo
David Samaniego
dsamanie en fi.uba.ar
Mie Mayo 4 19:42:03 EDT 2016
La version de python que uso es 2.7 y por ventaja es un script puntual que
lee solamente dos variables snmp en un solo equipo, asi que se descarta el
tema de multihilos, Les comparto la parte del codigo que tengo realizado.
No se si sea lo más optimo pero como está funciona. En el schedule.every si
le pongo 1 me guarda los registros cada 2 segundos y al colocarlo 0.5
efectivamente inserta cada 1 segundo como lo necesito.
Aqui va lo que tengo avanzado hasta ahora.
def interface_counterT1():
try:
indice = "XXX"
fecha = time.strftime('%Y/%m/%d')
tiempo = time.strftime('%H:%M:%S')
community="XXXXXX"
interface = "XX.XX.XX.XX"
cmdGen = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBindTableIn =
cmdGen.getCmd(
cmdgen.CommunityData(community),
cmdgen.UdpTransportTarget((interface, 161)),
'1.3.6.1.2.1.2.2.1.10.'+indice
)
cmdGen = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBindTableOut =
cmdGen.getCmd(
cmdgen.CommunityData(community),
cmdgen.UdpTransportTarget((interface, 161)),
'1.3.6.1.2.1.2.2.1.16.'+indice
)
cadena_conexion = ['localhost', 'XXXX', 'XXXX', 'XXXX']
conexion_db = db_herramientas.connect(*cadena_conexion)
cursor_db = conexion_db.cursor()
for name, val in varBindTableIn:
nombre = name.prettyPrint()
counterIN = val.prettyPrint()
sentido = "INPUT"
insertar = """INSERT INTO TABLAX
(`id_interface`,
`fecha`,
`hora` ,
`sentido` ,
`counter`) VALUES ('%s', '%s','%s','%s','%s');"""
%(int(indice), fecha, tiempo, sentido, counterIN )
cursor_db.execute(insertar)
for name, val in varBindTableOut:
nombre = name.prettyPrint()
counterOUT = val.prettyPrint()
sentido = "OUTPUT"
insertar = """INSERT INTO TABLAX
(`id_interface`,
`fecha`,
`hora` ,
`sentido` ,
`counter`) VALUES ('%s', '%s','%s','%s','%s');"""
%( int(indice), fecha, tiempo, sentido, counterOUT )
cursor_db.execute(insertar)
conexion_db.commit()
cursor_db.close()
conexion_db.close()
except:
print "Error"
schedule.every(0.5).seconds.do(interface_counterT1)
while True:
schedule.run_pending()
# time.sleep(1)
2016-05-03 16:10 GMT-03:00 Chema Cortes <pych3m4 en gmail.com>:
> El mar., 3 may. 2016 a las 17:41, David Samaniego (<dsamanie en fi.uba.ar>)
> escribió:
>
>> Hola buena tarde, dispongo de un script que realiza un una consulta smnp
>> y la informacion la inserta en una tabla mysql. El tema es que necesito que
>> cada consulta snmp se lo realice cada 1 segundo, ya que tiene que guardar
>> los tiempos para analizarlos porteriormente.
>> Lo que estaba haciendo para probar es lanzar un crontab que ejecute el
>> script, pero el tiempo minino es un minuto, así que no se me ocurre como
>> hacer para que cada insert lo haga en el tiempo que necesito. (Creo que
>> debo hacer un bucle que itere cada 1 segundo hasta 60 y que cuando termine
>> lo vuelva a ejecutar el crontab para que se vuelva a repetir.
>>
>> Alguna sugerencia de como puedo llevar a cabo la idea??
>>
>> Agradezco cualquier comentario.
>>
>
> Para darte una respuesta adecuada, se necesitaría saber qué versión de
> python estás usando y en qué plataforma usas.
>
> La solución "clásica" de usar time.sleep no es la recomendada en
> aplicaciones multihilo. Es mejor usar soluciones más "responsibles" como
> event.wait (suponiendo que estés usando python3).
>
> Mi consejo en que uses threading.Timer con python2; y el módulo sched
> (valores por defecto) con python3. (En la documentación de sched para
> python2 te explica cómo usar Timer).
>
> ....y si puedes elegir, python3.
>
> Por otra parte, supongo que no tienes probado lo de insertar datos cada
> segundo en una tabla mysql. Si estás pensando en lanzar varios scripts para
> traerte datos de distintos dispositivos, el bloqueo/desbloqueo de registros
> o tabla para insertar datos podría ser un problema. Yo no juntaría en el
> mismo script la extracción de datos snmp con la inserción de datos en la
> base de datos.
>
>
>
> --
> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales":
> http://ch3m4.org/blog
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20160504/f57ffa2d/attachment.html>
Más información sobre la lista de distribución Python-es