Sintaxis
newrelic.agent.register_application(name=None, timeout=None)
Registra el agente Python inmediatamente. Se utiliza para la inicialización manual del agente.
Descripción
Cuando se llama a initialize
, configura el agente Python pero no registra el agente con el recolector. Esta llamada registra al agente con el recolector.
Esto se utiliza principalmente para transacciones en segundo plano no web instrumentadas utilizando la API. Cuando se usa con transacción no web, llame register_application
lo antes posible después de la llamada initialize
.
Para transacciones web, el agente normalmente se registra automáticamente cuando ocurre la primera solicitud web o tarea en segundo plano y el agente recibe su configuración del lado del servidor del recolector. Debido a que el registro puede demorar aproximadamente un segundo, los detalles generalmente se pierden desde la primera transacción. Puede recopilar todos estos datos forzando el registro con register_application
, aunque hacerlo significa que su aplicación puede esperar a que se complete el registro antes de atender cualquier solicitud web o ejecutar tareas en segundo plano.
Si el script en sí ejecuta el servidor WSGI, llame a register_application
desde el hilo principal del programa en el archivo de script principal. Si usa Apache/mod_wsgi o uWSGI, realice la llamada desde el archivo de script WSGI y realice la llamada inmediatamente después initialize
.
Esta llamada devuelve el objeto de la aplicación, de la misma manera que lo hace application
. El objeto de aplicación se utiliza para obtener una referencia a la aplicación de monitor de agente actual y algunas llamadas a la API del agente de Python lo utilizan.
Evite llamar durante el bloqueo de importación global
No llame a register_application
con un tiempo de espera distinto de cero cuando se mantendrá el bloqueo de importación global de Python. En otras palabras, no lo llame en un archivo de módulo en el ámbito global mientras se importa el módulo. Hacerlo puede resultar en un punto muerto temporal con el subproceso en segundo plano creado por esta llamada (el punto muerto no se romperá hasta que expire el tiempo de espera).
Tenga en cuenta que muchos servidores WSGI importan el módulo que contiene la aplicación WSGI a través de los mecanismos de importación de módulos estándar de Python. En esos casos, se mantendrá el bloqueo de importación global y puede ocurrir el problema de interbloqueo descrito anteriormente.
Para Gunicorn: el problema de punto muerto que acabamos de describir también puede ocurrir cuando se usa Gunicorn. El problema es que activar register_application
desde el módulo WSGI no es seguro porque precarga el módulo en el proceso principal. Para usar register_application
con Gunicorn (con o sin tiempo de espera), llámalo desde una devolución de llamada post_fork()
. Esto no es un problema con Apache/mod_wsgi, ya que esas herramientas han sido diseñadas para no hacer esto, por lo que es seguro crear subprocesos en segundo plano cuando se carga la aplicación WSGI.
Llamada después de la bifurcación del proceso del trabajador
Si está registrando transacciones en el proceso del trabajador secundario, no llame a register_application
en el proceso principal antes de que se bifurquen los procesos del trabajador secundario. Si llamara a register_application
antes de bifurcar, el subproceso del agente en segundo plano se eliminaría cuando se bifurcara el proceso. Dado que el hilo principal informa datos al recolector, el agente no podrá informar datos del proceso de trabajo secundario.
Parámetros
Parámetro | Descripción |
---|---|
cadena | Opcional. El nombre de la aplicación. Si se establece, esto anula el nombre de la aplicación establecido en la configuración del agente Python. |
int o flotante | La cantidad de segundos que la aplicación intentará registrarse antes de darse por vencido y enviar una respuesta; lo que significa que esta línea se bloqueará hasta que se inicie New Relic o se exceda el tiempo de espera. Un valor de Este valor proporciona el número máximo de segundos que se debe bloquear a la persona que llama antes de que se le devuelva el control y se le permita continuar. Sin ningún valor, la llamada utiliza la configuración |
Valores de retorno
Devuelve un objeto de aplicación que pueden utilizar otras llamadas API del agente Python.
Ejemplos
Registrar una tarea en segundo plano
Este ejemplo registra una tarea en segundo plano que no es web con un tiempo de espera prolongado. Normalmente, para una aplicación web, tendría un tiempo de espera muy corto (el valor predeterminado es 0), pero podría establecer un tiempo de espera más largo para una tarea poco frecuente que no sea web para garantizar que se realicen la inicialización y el registro.
import newrelic.agent
newrelic.agent.initialize('newrelic.ini')newrelic.agent.register_application(timeout=10.0)
@newrelic.agent.background_task()def main(): pass
if __name__ == '__main__': main()