Syntaxe
newrelic.agent.background_task(application=None, name=None, group=None)
Utilisé pour instrumenter une tâche d'arrière-plan ou une autre transaction non Web à temps d'exécution finis.
Description
Ce décorateur Python peut être utilisé pour instrumenter des tâches d'arrière-plan ou d'autres transactions non web à temps d'exécution finis. Ceci est généralement utilisé pour instrumenter des activités non Web telles que les processus de travail, les systèmes basés sur les tâches et les scripts autonomes. Les transactions marquées comme tâches d'arrière-plan sont affichées en tant que transactions non Web dans l'UI APM et séparées des transactions Web.
Important
Si une fonction n'est pas déjà instrumentée, vous pouvez utiliser function_trace()
pour créer une trace de fonction pour cette fonction dans une tâche en arrière-plan. Ou vous pouvez utiliser le fichier de configuration pour instrumenter des fonctions non instrumentées.
Si une fonction utilisant le décorateur de tâche d'arrière-plan est appelée dans le contexte d'un Web de transaction, alors le Web de transaction est marqué comme une tâche d'arrière-plan. La mesure du temps pris commence au démarrage de la transaction Web d'origine.
Si vous ne pouvez pas utiliser le décorateur, l’un de ces formats d’appel peut être plus utile :
- The context manager: Si les tâches à monitorer ne sont déterminées qu'au moment de l'exécution (et non au moment de l'importation), vous pouvez utiliser le gestionnaire de contexte
BackgroundTask
pour encapsuler directement l'exécution d'un bloc de code. (Il s'agit du gestionnaire de contexte utilisé parBackgroundTaskWrapper
.) - The wrapper:Si vous savez à l'avance où se trouvent les fonctions spécifiques que vous souhaitez suivre, vous pouvez utiliser le décorateur
background_task
. Mais si vous ne connaissez pas toutes les fonctions qui doivent être tracées (par exemple, si elles sont recherchées dynamiquement dans le cadre d'un système de routage), vous devez alors utiliserBackgroundTaskWrapper
pour encapsuler la fonction au moment de l'enregistrement ou au moment de l'appel. - The path-based wrapper: La forme wrapper basée sur le chemin est
wrap_background_task
.
Pour en savoir plus sur les différences et les utilisations de ces formes de fonctions, consultez Formats d'appel de variables.
Paramètres
Décorateur et gestionnaire de contexte paramètre
newrelic.agent.background_task(application=None, name=None, group=None)
newrelic.agent.BackgroundTask(application=None, name=None, group=None)
paramètre pour ces appels :
paramètres | Description |
---|---|
instanced'application | Requis. L'application sous laquelle les données seront signalées. La valeur par défaut est Pour en savoir plus sur la génération d’un objet d’application, consultez la méthode L'application, même si elle est spécifiée, peut toujours être remplacée si |
chaîne | Requis. Le nom de la transaction. La valeur par défaut est |
chaîne | Facultatif. Le Si ce paramètre n'est pas fourni, le groupe prend par défaut la valeur |
Paramètre de l'enveloppe :
newrelic.agent.BackgroundTaskWrapper(wrapped, application=None, name=None, group=None)
BackgroundTaskWrapper
prend le même paramètre que le décorateur background_task
et ce paramètre wrapped
supplémentaire :
paramètres | Description |
---|---|
méthode | Requis. La méthode à tracer. |
Paramètre basé sur le chemin :
newrelic.agent.wrap_background_task(module, object_path, application=None, name=None, group=None)
wrap_background_task
prend le même paramètre que le décorateur background_task
plus ces paramètres supplémentaires :
paramètres | Description |
---|---|
module ou chaîne | Requis. Le module contenant la fonction/activité non Web pour laquelle vous êtes instrumenté. |
chaîne | Requis. Le chemin vers le module. |
Exemples
background_task
Voici un exemple d'utilisation du décorateur background_task
:
@newrelic.agent.background_task()def task(): ...
BackgroundTask
Un exemple d'utilisation de BackgroundTask
:
application = newrelic.agent.application()name = newrelic.agent.callable_name(task)
with BackgroundTask(application, name): task()
Voici un autre exemple avec plus de paramètres :
application = newrelic.agent.register_application(timeout=10.0)
def execute_task(task_name): with newrelic.agent.BackgroundTask(application, name=task_name, group='Task'): ...
BackgroundTaskWrapper
Un exemple d'utilisation du BackgroundTaskWrapper
:
task = newrelic.agent.BackgroundTaskWrapper(get_next_task())result = task(*args, **kwargs)
Dans cet exemple, si cet appel a été effectué dans un Web de transactions monitoré par un agent, l'appel reclassera le Web de transactions comme une tâche d'arrière-plan. Toutefois, si l'appel a été effectué dans un thread d'arrière-plan ou une coroutine, il démarrerait l'enregistrement d'une nouvelle transaction de tâche d'arrière-plan qui suit ce qui se passe jusqu'au retour de l'appel.
Dépannage
Si la transaction de la tâche en arrière-plan n'apparaît pas dans l' UI, cela peut être dû au fait que la transaction créée par la tâche en arrière-plan n'a jamais été quittée ou que la tâche a été exécutée trop longtemps. Si une tâche en arrière-plan s'exécute pendant plus de 20 minutes, elle est abandonnée par le serveur car elle est considérée comme trop ancienne pour être conservée. Les tâches en arrière-plan ne doivent pas s'exécuter pendant plus de 20 minutes et, si c'est le cas, elles doivent être divisées en plusieurs tâches en arrière-plan.