>백엔드 개발 >파이썬 튜토리얼 >FastAPI는 어떻게 병렬 실행을 처리하고 작업 차단을 방지할 수 있습니까?

FastAPI는 어떻게 병렬 실행을 처리하고 작업 차단을 방지할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-27 14:20:10298검색

How Can FastAPI Handle Parallel Execution and Avoid Blocking Operations?

FastAPI 및 병렬 실행

FastAPI의 비동기 프로그래밍

기본적으로 FastAPI는 비동기 프로그래밍 패턴을 사용하므로 다음을 수행할 수 있습니다. 여러 요청을 동시에 처리합니다. 구체적으로는 코루틴과 이벤트 루프를 사용하여 요청을 효율적으로 실행합니다.

Def vs. Async Def 함수

def(동기)로 정의된 함수를 처리합니다. 외부 스레드 풀 내의 별도 스레드에 있습니다. async def(asynchronous)로 정의된 함수는 이벤트 루프에서 직접 실행됩니다.

차단 코드 실행

문제: 차단 작업이 async def 엔드포인트 내에서 실행되면 이벤트 루프를 차단하고 요청을 직렬화할 수 있습니다. 처리.

해결책:

  1. def:로 엔드포인트 정의: 엔드포인트에 비동기 작업이 필요하지 않은 경우 일반 def를 사용하여 차단을 방지하세요.
  2. 사용 run_in_threadpool(): async def 엔드포인트 내의 작업 차단의 경우 FastAPI run_in_threadpool() 함수를 사용하면 스레드 풀 내의 별도 스레드에서 작업을 실행하여 이벤트 루프 차단을 방지할 수 있습니다.
  3. 사용 asyncio.loop.run_in_executor(): 이 함수는 실행을 위해 run_in_threadpool()에 대한 대안을 제공합니다. 작업을 비동기적으로 차단합니다.
  4. 별도의 프로세스(ProcessPoolExecutor) 사용: CPU 집약적인 계산의 경우 병렬화를 최대화하기 위해 별도의 프로세스에서 작업을 실행하는 것이 좋습니다.

스레드 풀 방지 소진

  • 여러 비동기 HTTP 요청을 병렬로 실행하려면 asyncio.gather()와 함께 httpx 라이브러리를 사용하세요.
  • 여러 FastAPI 작업자(uvicorn --workers)를 사용하여 각각 자체 스레드 풀이 있는 여러 프로세스에 요청을 배포합니다.
  • 다음과 같은 외부 작업 대기열 시스템 사용을 고려하세요. 과도한 백그라운드 계산을 위한 셀러리.

추가 참고 사항:

  • 브라우저 캐싱: 시크릿 탭을 열거나 다른 브라우저를 사용하세요. API에 대한 브라우저 캐싱 효과를 방지하기 위한 세션
  • 비동기 I/O: httpx 및 aiohttp와 같은 비동기 HTTP 클라이언트는 요청과 같은 동기 클라이언트보다 더 나은 성능을 제공합니다.

위 내용은 FastAPI는 어떻게 병렬 실행을 처리하고 작업 차단을 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.