Registro del lenguaje Python e información sobre el tiempo de ejecución
Este ejemplo utiliza el siguiente nombre de archivo: ' logrun.py
Código
El código de este ejemplo explora funcionalidades que pueden no ser de uso común. El registro se puede utilizar para ayudar a rastrear la ejecución de un AE. Para que sea útil, el AE debe estar registrado con una máscara de registro y el registro debe estar habilitado a través de nzudxdbg. Para recibir mensajes de registro del sistema en la ventana donde se inició el sistema NPS, es necesario iniciar NPS con la opción '-i' ' (por ejemplo, 'nzstart -i'). Esto hace que los procesos NPS permanezcan unidos al terminal. La información de tiempo de ejecución proporciona estadísticas sobre el sistema NPS, incluyendo el número de dataslices, el número de SPUs y el locus de ejecución.
import nzae
class LogRunAe(nzae.Ae):
def _run(self):
for row in self:
pass
self.output("Dataslice ID: " + repr(self.getDatasliceId()))
self.output("Hardware ID: " + repr(self.getHardwareId()))
self.output("Number of Data Slices: " +
repr(self.getNumberOfDataSlices()))
self.output("Number of Spus: " + repr(self.getNumberOfSpus()))
self.output("Suggested Memory Limit: " +
repr(self.getSuggestedMemoryLimit()))
self.output("Transaction ID: " + repr(self.getTransactionId()))
self.output("Is A User Query: " + repr(self.isAUserQuery()))
self.output("Is Logging Enabled: " + repr(self.isLoggingEnabled()))
self.output("Is Running on a spu: " + repr(self.isRunningOnSpu()))
self.output("Is Running in Postgres: " +
repr(self.isRunningInPostgres()))
self.output("Is Running in DBOS: " + repr(self.isRunningInDbos()))
self.output("Is a UDA: " + repr(self.isUda()))
self.output("Is a UDF: " + repr(self.isUdf()))
self.output("Is a UDTF: " + repr(self.isUdtf()))
self.log("Here is some logging text!", self.LOG_LEVEL__DEBUG)
self.log("Here is some more logging text!", self.LOG_LEVEL__DEBUG)
LogRunAe.run()
virtual
Despliegue el script:
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language python64 \
--template deploy ./logrun.py --version 3
Registro
Registra el ejemplo utilizando las opciones --mem y --mask. La opción --mask activa el registro para DEBUG y la opción --mem establece la información de tiempo de ejecución de memoria.
$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language python64 --version 3 \
--template udtf --exe logrun.py --sig "log_run(int4)" \
--return "table(text varchar(1000))" --mask debug --mem 100k
En ejecución
Antes de ejecutarlo, active el registro ejecutando nzudxdbg:
nzudxdbg
Processing 1 spus
.
done
Processing host
done
Ejecute la consulta en nzsql:
SELECT * FROM TABLE WITH FINAL(log_run(1));
TEXT
-------------------------------
Dataslice ID: 0
Hardware ID: 0
Number of DATA Slices: 4
Number of Spus: 1
Suggested Memory LIMIT: 102400
Transaction ID: 8520
IS A User Query: True
IS Logging Enabled: True
IS Running ON a spu: False
IS Running IN Postgres: False
IS Running IN DBOS: True
IS a UDA: False
IS a UDF: False
IS a UDTF: True
(14 rows)
El registro del sistema NPS aparece en la ventana donde se inició el sistema NPS:
05-05-10 14:33:18 (dbos.18728) [d,udx ] Here is some logging text!
05-05-10 14:33:18 (dbos.18728) [d,udx ] Here is some more logging text