Python 3.5 비동기 프로그래밍에서 언제 `await`를 사용해야 하며, 그 제한 사항은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-26 17:06:14
원래의
884명이 탐색했습니다.

When should I use `await` in Python 3.5 asynchronous programming, and what are its limitations?

Python 3.5에서 Wait를 사용하는 시기와 제한 사항

Python 3.5의 비동기성은 주로 asyncio 라이브러리와 async/ 구문을 기다립니다. 이러한 구성을 언제 어디서 활용해야 하는지 이해하는 것은 비동기 애플리케이션의 성능을 최적화하는 데 중요할 수 있습니다.

await 사용 결정은 코드의 특성에 따라 달라집니다. 기본적으로 코드는 동기적으로 실행됩니다. 비동기성을 도입하려면 async def를 사용하여 함수를 정의하고 wait를 사용하여 호출할 수 있습니다. 그러나 당면한 작업에 동기 코드나 비동기 코드 중 어느 것이 더 적합한지 결정하는 것이 중요합니다.

일반적으로 I/O 작업을 처리할 때 Wait를 사용하는 것이 좋습니다. 네트워크 요청이나 데이터베이스 호출과 같은 I/O 작업은 본질적으로 비동기인 경우가 많으며 이를 이벤트 루프에 위임하면 크게 가속화될 수 있습니다.

예를 들어 다음 동기 코드를 고려해 보세요.

download(url1)  # takes 5 seconds
download(url2)  # takes 5 seconds
# Total time: 10 seconds
로그인 후 복사

asyncio와 wait를 사용하면 동일한 코드를 비동기식으로 다시 작성할 수 있어 총 실행 시간이 더 오래 걸리는 시간으로 단축됩니다. 작업:

await asyncio.gather(
    async_download(url1),  # takes 5 seconds
    async_download(url2),   # takes 5 seconds
)
# Total time: only 5 seconds (plus minimal asyncio overhead)
로그인 후 복사

모든 비동기 함수는 필요한 경우 동기 코드를 자유롭게 활용할 수 있다는 점도 중요합니다. 그러나 타당한 이유 없이 동기 코드를 비동기 코드로 캐스팅하는 것은 본질적으로 어떠한 이점도 제공하지 않으므로 피해야 합니다.

비동기 코드와 관련하여 중요한 고려 사항 중 하나는 장기 실행 동기 작업으로 인해 전체 프로그램이 정지될 가능성이 있다는 것입니다. . 특정 임계값(예: 50밀리초)을 초과하는 동기 작업은 동시 비동기 작업을 차단할 수 있습니다.

이 문제를 완화하려면 해당 작업을 별도의 프로세스에 아웃소싱하고 결과를 기다릴 수 있습니다.

executor = ProcessPoolExecutor(2)

async def extract_links(url):
    ...
    # If search_in_very_big_file() is a long synchronous operation, offload it to a separate process
    links_found = await loop.run_in_executor(executor, search_in_very_big_file, links)
로그인 후 복사

마지막으로 run_in_executor()를 사용하여 I/O 바인딩 동기 함수를 비동기 코드에 통합할 수 있다는 점에 주목할 가치가 있습니다. ThreadPoolExecutor와 함께 사용하여 다중 처리와 관련된 오버헤드를 최소화합니다.

위 내용은 Python 3.5 비동기 프로그래밍에서 언제 `await`를 사용해야 하며, 그 제한 사항은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿