통사론
newrelic.agent.background_task(application=None, name=None, group=None)
백그라운드 작업이나 유한 런타임의 기타 SSL을 제거하는 데 사용됩니다.
설명
이 Python 데코레이터는 제한된 런타임의 백그라운드 작업이나 기타 비 웹 프로세서 에 사용될 수 있습니다. 이는 일반적으로 작업자 프로세스, 작업 기반 시스템 및 독립 실행형 스크립트와 같은 비웹 활동에 사용됩니다. 백그라운드 작업으로 표시된 트랜잭션은 APM UI에서 비웹 프로세서로 표시되며 웹 트랜잭션과 분리됩니다.
중요
함수가 아직 계측되지 않은 경우 function_trace()
사용하여 백그라운드 작업 내에서 해당 함수에 대한 함수 추적을 만들 수 있습니다. 또는 구성 파일을 사용하여 계측되지 않은 기능을 계측할 수 있습니다.
백그라운드 작업 데코레이터를 사용하는 함수가 웹 트랜잭션 컨텍스트 내에서 호출되면 웹 트랜잭션은 백그라운드 작업으로 표시됩니다. 소요 시간 측정은 원래 웹 트랜잭션이 시작될 때 시작됩니다.
데코레이터를 사용할 수 없는 경우 다음 호출 형식 중 하나가 더 유용할 수 있습니다.
The context manager
: 모니터링할 작업이 런타임에만 결정되고 가져오기 시간에는 결정되지 않는 경우
BackgroundTask
컨텍스트 관리자를 사용하여 코드 블록 실행을 직접 래핑할 수 있습니다. (이것은BackgroundTaskWrapper
에서 사용하는 컨텍스트 관리자입니다.)The wrapper
: 추적하려는 특정 함수가 어디에 있는지 미리 알고 있다면
background_task
데코레이터를 사용할 수 있습니다. 하지만 트레이스가 되어야 하는 모든 기능을 모르는 경우(예를 들어 라우팅 시스템의 일부로 동적으로 조회되는 경우)BackgroundTaskWrapper
을 사용하여 해당 기능을 래핑해야 합니다. 등록시 또는 전화시.The path-based wrapper
: 경로 기반 래퍼 형식은
wrap_background_task
입니다.
이러한 함수 형식의 차이점과 사용에 대한 자세한 내용은 변수 호출 형식 을 참조하세요.
매개변수
데코레이터 및 컨텍스트 관리자 매개변수
newrelic.agent.background_task(application=None, name=None, group=None)
newrelic.agent.BackgroundTask(application=None, name=None, group=None)
이러한 호출에 대한 매개변수:
매개변수 | 설명 |
---|---|
애플리케이션 인스턴스 | 필수의. 데이터가 보고되는 응용 프로그램입니다. 기본값은 애플리케이션 객체 생성에 대한 자세한 내용은 애플리케이션이 지정되더라도 요청 환경 사전당 WSGI 애플리케이션에 |
끈 | 필수의. 트랜잭션의 이름입니다. 기본값은 |
끈 | 선택 과목. 제공되지 않은 경우 그룹은 이름이 |
래퍼 매개변수:
newrelic.agent.BackgroundTaskWrapper(wrapped, application=None, name=None, group=None)
BackgroundTaskWrapper
background_task
데코레이터 및 이 추가 wrapped
매개변수와 동일한 매개변수 를 사용합니다.
매개변수 | 설명 |
---|---|
방법 | 필수의. 추적할 방법입니다. |
경로 기반 매개변수:
newrelic.agent.wrap_background_task(module, object_path, application=None, name=None, group=None)
wrap_background_task
background_task
데코레이터와 동일한 매개변수 와 다음 추가 매개변수를 사용합니다.
매개변수 | 설명 |
---|---|
모듈 또는 문자열 | 필수의. 계측 중인 웹이 아닌 기능/활동이 포함된 모듈입니다. |
끈 | 필수의. 모듈의 경로입니다. |
예
background_task
데코레이터 예제
다음은 background_task
데코레이터를 사용하는 예입니다.
@newrelic.agent.background_task()def task(): ...
BackgroundTask
컨텍스트 관리자 예제
BackgroundTask
사용 예:
application = newrelic.agent.application()name = newrelic.agent.callable_name(task)
with BackgroundTask(application, name): task()
다음은 매개변수가 더 많은 또 다른 예입니다.
application = newrelic.agent.register_application(timeout=10.0)
def execute_task(task_name): with newrelic.agent.BackgroundTask(application, name=task_name, group='Task'): ...
BackgroundTaskWrapper
예시
BackgroundTaskWrapper
사용 예:
task = newrelic.agent.BackgroundTaskWrapper(get_next_task())result = task(*args, **kwargs)
이 예에서 에이전트가 모니터링하는 웹 트랜잭션에서 이 호출이 이루어진 경우 호출은 웹 트랜잭션을 백그라운드 작업으로 재분류합니다. 그러나 호출이 백그라운드 스레드 또는 코루틴에서 이루어진 경우 호출이 반환될 때까지 발생하는 것을 추적하는 새로운 백그라운드 작업 트랜잭션의 기록을 시작합니다.
문제점 해결
백그라운드 작업의 트랜잭션이 UI에 표시되지 않는 경우 이는 백그라운드 작업에 의해 생성된 트랜잭션이 종료되지 않았거나 작업이 너무 오래 실행되었기 때문일 수 있습니다. 백그라운드 작업이 20분 이상 실행되면 너무 오래되어 보관할 수 없다고 간주되어 서버에서 삭제됩니다. 백그라운드 작업은 20분 이상 실행되어서는 안 되며, 실행되는 경우 여러 백그라운드 작업으로 나누어야 합니다.