Sintaxis
newrelic.agent.background_task(application=None, name=None, group=None)
Se utiliza para instrumentar una tarea en segundo plano u otra transacción no web de tiempo de ejecución finito.
Descripción
Este decorador de Python se puede utilizar para instrumentar tareas en segundo plano u otras transacciones sin red de tiempo de ejecución finito. Por lo general, esto se utiliza para instrumentar actividades no web, como procesos de trabajo, sistemas basados en trabajos y secuencias de comandos independientes. Las tareas marcadas como en segundo plano se muestran como transacción no web en la UI de APM y separadas de transacción web.
Importante
Si una función aún no está instrumentada, puede usar function_trace()
para crear una traza de función para esa función dentro de una tarea en segundo plano. O puede utilizar el archivo de configuración para instrumentar funciones no instrumentadas.
Si se llama a una función que utiliza el decorador de tareas en segundo plano dentro del contexto de una transacción web, entonces la transacción web se marca como una tarea en segundo plano. La medición del tiempo empleado comienza cuando se inicia la transacción web original.
Si no puede utilizar el decorador, uno de estos formatos de llamada puede resultar más útil:
The context manager
: Si las tareas a monitorear solo se determinarán en tiempo de ejecución (y no en el momento de importación), puede usar el administrador de contexto
BackgroundTask
para encapsular directamente la ejecución de un bloque de código. (Este es el administrador de contexto utilizado porBackgroundTaskWrapper
).The wrapper
: Si sabe de antemano dónde están las funciones específicas que desea rastrear, puede utilizar el decorador
background_task
. Pero si no conoce todas las funciones que deben trazarse (por ejemplo, si se buscan dinámicamente como parte de un sistema de enrutamiento), entonces debe usarBackgroundTaskWrapper
para ajustar la función en ese momento. de inscripción o en el momento de la convocatoria.The path-based wrapper
: El formulario contenedor basado en ruta es
wrap_background_task
.
Para obtener más información sobre las diferencias y los usos de estas formas de funciones, consulte Formatos de llamada de variables.
Parámetros
Parámetro decorador y administrador de contexto
newrelic.agent.background_task(application=None, name=None, group=None)
newrelic.agent.BackgroundTask(application=None, name=None, group=None)
Parámetro para estas llamadas:
Parámetro | Descripción |
---|---|
Instancia de aplicación | Requerido. La aplicación bajo la cual se reportarán los datos. El valor predeterminado es Para obtener más información sobre cómo generar un objeto de aplicación, consulte el método La aplicación, incluso si se especifica, aún se puede anular si |
cadena | Requerido. El nombre de la transacción. El valor predeterminado es |
cadena | Opcional. El Si no se proporciona, el grupo tiene como valor predeterminado |
Parámetro de envoltura:
newrelic.agent.BackgroundTaskWrapper(wrapped, application=None, name=None, group=None)
BackgroundTaskWrapper
toma los mismos parámetros que el decorador background_task
y este parámetro wrapped
adicional:
Parámetro | Descripción |
---|---|
método | Requerido. El método para ser trazada. |
Parámetro basado en ruta:
newrelic.agent.wrap_background_task(module, object_path, application=None, name=None, group=None)
wrap_background_task
toma el mismo parámetro que el decorador background_task
más estos parámetros adicionales:
Parámetro | Descripción |
---|---|
módulo o cadena | Requerido. El módulo que contiene la función/actividad no web que está instrumentado. |
cadena | Requerido. La ruta al módulo. |
Ejemplos
background_task
ejemplo de decorador
A continuación se muestra un ejemplo del uso del decorador background_task
:
@newrelic.agent.background_task()def task(): ...
BackgroundTask
ejemplo de administrador de contexto
Un ejemplo de uso de BackgroundTask
:
application = newrelic.agent.application()name = newrelic.agent.callable_name(task)
with BackgroundTask(application, name): task()
Aquí hay otro ejemplo con más parámetros:
application = newrelic.agent.register_application(timeout=10.0)
def execute_task(task_name): with newrelic.agent.BackgroundTask(application, name=task_name, group='Task'): ...
BackgroundTaskWrapper
ejemplo
Un ejemplo de uso de BackgroundTaskWrapper
:
task = newrelic.agent.BackgroundTaskWrapper(get_next_task())result = task(*args, **kwargs)
En este ejemplo, si esta llamada se realizó en una transacción web que está siendo monitoreada por un agente, la llamada reclasificará la transacción web como una tarea en segundo plano. Sin embargo, si la llamada se realizó en un subproceso o rutina en segundo plano, entonces se iniciaría la grabación de una nueva transacción de tarea en segundo plano que rastrea lo que ocurre hasta que regresa la llamada.
Resolución de problemas
Si la transacción de la tarea en segundo plano no aparece en la UI, esto podría deberse a que la transacción creada por la tarea en segundo plano nunca se cerró o la tarea duró demasiado. Si una tarea en segundo plano se ejecuta durante más de 20 minutos, el servidor la descarta porque se considera demasiado antigua para conservarla. Las tareas en segundo plano no deben ejecutarse durante más de 20 minutos y, si lo hacen, deben dividirse en varias tareas en segundo plano.