• EnglishEspañol日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

Criar um problema

background_task (API do agente Python)

Sintaxe

newrelic.agent.background_task(application=None, name=None, group=None)

Usado para instrumentalizar uma tarefa em segundo plano ou outra transação fora da web de tempo de execução finito.

Descrição

Este decorador Python pode ser usado para instrumentar tarefas em segundo plano ou outras transações fora da web de tempo de execução finito. Isso normalmente é usado para instrumentar atividades fora da Web, como processos de trabalho, sistemas baseados em tarefas e scripts independentes. As transações marcadas como tarefas em segundo plano são exibidas como transações fora da web na interface do APM e separadas das transações da web.

Importante

Se uma função ainda não for um instrumento, você poderá usar function_trace() para criar um trace de função para essa função em uma tarefa em segundo plano. Ou você pode usar o arquivo de configuração para funções não instrumentadas do instrumento.

Se uma função que usa o decorador de tarefa em segundo plano for chamada no contexto de uma transação da web, a transação da web será marcada como uma tarefa em segundo plano. A medição do tempo gasto começa quando se inicia a transação original da web.

Se você não puder usar o decorador, um destes formatos de chamada pode ser mais útil:

  • The context manager

    : se as tarefas a serem monitoradas forem determinadas apenas no tempo de execução (e não no tempo de importação), você poderá usar o gerenciador de contexto BackgroundTask para agrupar diretamente a execução de um bloco de código. (Este é o gerenciador de contexto usado por BackgroundTaskWrapper.)

  • The wrapper

    : se você souber antecipadamente onde estão as funções específicas que deseja rastrear, poderá usar o decorador background_task . Mas se você não conhece todas as funções que precisam ser rastreadas (por exemplo, se elas estão sendo pesquisadas dinamicamente como parte de um sistema de roteamento), então você deve usar o BackgroundTaskWrapper para agrupar a função no momento da inscrição ou no momento da ligação.

  • The path-based wrapper

    : o formulário wrapper baseado em caminho é wrap_background_task.

Para obter mais informações sobre as diferenças e os usos dessas formas de função, consulte Formatos de chamada de variáveis.

Parâmetro

Parâmetro decorador e gerenciador de contexto

newrelic.agent.background_task(application=None, name=None, group=None)
newrelic.agent.BackgroundTask(application=None, name=None, group=None)

Parâmetro para essas chamadas:

Parâmetro

Descrição

application

Instância do aplicativo

Obrigatório. O aplicativo sob o qual os dados serão relatados. O padrão é None. Se ficar sem valor, o aplicativo especificado na configuração do agente (arquivo de configuração ou variável de ambiente) será usado.

Para obter mais informações sobre como gerar um objeto de aplicativo, consulte o método application() .

O aplicativo, mesmo se especificado, ainda poderá ser substituído se newrelic.app_name for definido no aplicativo WSGI por dicionário de ambiente de solicitação.

name

corda

Obrigatório. O nome da transação. O valor padrão é None. Por padrão, o nome será o nome da função à qual o decorador foi aplicado, mas você pode substituir isso fornecendo este nome.

group

corda

Opcional. O group representa a estrutura de nomenclatura do parâmetro name . Isto é usado na interface para definir o tipo de transação.

Se não for fornecido, o grupo será padronizado como Function na expectativa de que o nome tenha o formato module:class.function ou module:function e represente o nome da função que está sendo executada. Se você estiver criando um grupo personalizado, recomendamos prefixá-lo com Python/.

Parâmetro do wrapper:

newrelic.agent.BackgroundTaskWrapper(wrapped, application=None, name=None, group=None)

BackgroundTaskWrapper usa os mesmos parâmetros do decorador background_task e este parâmetro wrapped adicional:

Parâmetro

Descrição

wrapped

método

Obrigatório. O método a ser rastreado.

Parâmetro baseado em caminho:

newrelic.agent.wrap_background_task(module, object_path, application=None, name=None, group=None)

wrap_background_task leva o mesmo parâmetro do decorador background_task mais estes parâmetros adicionais:

Parâmetro

Descrição

module

módulo ou string

Obrigatório. O módulo que contém a função/atividade não web que você é instrumento.

object_path

corda

Obrigatório. O caminho para o módulo.

Exemplos

background_task exemplo de decorador

Aqui está um exemplo de uso do decorador background_task :

@newrelic.agent.background_task()
def task():
...

BackgroundTask exemplo de gerenciador de contexto

Um exemplo de uso de BackgroundTask:

application = newrelic.agent.application()
name = newrelic.agent.callable_name(task)
with BackgroundTask(application, name):
task()

Aqui está outro exemplo com mais 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 exemplo

Um exemplo de uso do BackgroundTaskWrapper:

task = newrelic.agent.BackgroundTaskWrapper(get_next_task())
result = task(*args, **kwargs)

Neste exemplo, se esta chamada foi realizada em uma transação da web sendo monitorada por um agente, a chamada reclassificará a transação da web como uma tarefa em segundo plano. Se, no entanto, a chamada fosse feita em um thread ou corrotina em segundo plano, ela iniciaria a gravação de uma nova transação de tarefa em segundo plano que rastreia o que ocorre até que a chamada retorne.

Resolução de problemas

Se a transação da tarefa em segundo plano não estiver aparecendo na interface do usuário, isso pode ocorrer porque a transação criada pela tarefa em segundo plano nunca foi encerrada ou a tarefa foi executada por muito tempo. Se uma tarefa em segundo plano for executada por mais de 20 minutos, ela será descartada pelo servidor porque foi considerada muito antiga para ser mantida. As tarefas em segundo plano não devem ser executadas por mais de 20 minutos e, se isso acontecer, devem ser divididas em várias tarefas em segundo plano.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.