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