Daniel Roy Greenfeld: pyinstrument를 사용하여 Air 앱 프로파일링하기
FastAPI 기반의 Air는 성능 프로파일링을 위해 pyinstrument를 활용할 수 있습니다. 이를 활성화하려면 air[standard]와 pyinstrument를 모두 설치해야 합니다. 예제 코드는 환경 변수 PROFILING을 기반으로 pyinstrument를 조건부로 활성화하여 통합하는 방법을 보여줍니다. 이는 프로덕션 환경에서 성능 오버헤드를 피하는 데 중요합니다. profile_request라는 미들웨어 함수가 HTTP 요청을 가로챕니다. profile 쿼리 매개변수가 존재하면 pyinstrument가 프로파일링을 시작합니다. 요청이 call_next에 의해 처리된 후, pyinstrument는 프로파일링 결과를 중지하고 HTML 출력을 반환합니다. 이를 통해 성능 병목 현상을 시각적으로 확인할 수 있습니다. 애플리케이션에는 asyncio.sleep을 사용하여 지연을 시뮬레이션하는 링크가 있는 index 페이지가 포함되어 있습니다. 이러한 링크는 프로파일링을 트리거하기 위해 profile=1 쿼리 매개변수로 액세스할 수 있습니다. 환경 변수를 영구적으로 설정하지 않고 프로파일링을 활성화하여 애플리케이션을 실행하려면, 개발 서버 명령 앞에 PROFILING=1을 붙입니다. 예를 들어, PROFILING=1 fastapi dev main.py는 해당 실행에 대해 프로파일링을 활성화합니다. 그런 다음 브라우저에서 http://localhost:8000으로 이동하여 프로파일링 결과를 볼 수 있습니다.
air[standard]와pyinstrument를 모두 설치해야 합니다. 예제 코드는 환경 변수PROFILING을 기반으로 pyinstrument를 조건부로 활성화하여 통합하는 방법을 보여줍니다. 이는 프로덕션 환경에서 성능 오버헤드를 피하는 데 중요합니다.profile_request라는 미들웨어 함수가 HTTP 요청을 가로챕니다.profile쿼리 매개변수가 존재하면 pyinstrument가 프로파일링을 시작합니다. 요청이call_next에 의해 처리된 후, pyinstrument는 프로파일링 결과를 중지하고 HTML 출력을 반환합니다. 이를 통해 성능 병목 현상을 시각적으로 확인할 수 있습니다. 애플리케이션에는asyncio.sleep을 사용하여 지연을 시뮬레이션하는 링크가 있는index페이지가 포함되어 있습니다. 이러한 링크는 프로파일링을 트리거하기 위해profile=1쿼리 매개변수로 액세스할 수 있습니다. 환경 변수를 영구적으로 설정하지 않고 프로파일링을 활성화하여 애플리케이션을 실행하려면, 개발 서버 명령 앞에PROFILING=1을 붙입니다. 예를 들어,PROFILING=1 fastapi dev main.py는 해당 실행에 대해 프로파일링을 활성화합니다. 그런 다음 브라우저에서http://localhost:8000으로 이동하여 프로파일링 결과를 볼 수 있습니다.