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 porBackgroundTaskWrapper
.)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 oBackgroundTaskWrapper
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 |
---|---|
Instância do aplicativo | Obrigatório. O aplicativo sob o qual os dados serão relatados. O padrão é Para obter mais informações sobre como gerar um objeto de aplicativo, consulte o método O aplicativo, mesmo se especificado, ainda poderá ser substituído se |
corda | Obrigatório. O nome da transação. O valor padrão é |
corda | Opcional. O Se não for fornecido, o grupo será padronizado como |
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 |
---|---|
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 |
---|---|
módulo ou string | Obrigatório. O módulo que contém a função/atividade não web que você é instrumento. |
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.