Python 3.5의 `await`를 언제 사용해야 하며 언제 사용하지 않아야 합니까?

Susan Sarandon
풀어 주다: 2024-11-21 12:45:16
원래의
630명이 탐색했습니다.
When should I use Python 3.5's `await` and when should I avoid it? 
I/O 작업에 대한 Wait 수용

await를 수용하는 주된 이유는 Wait를 활용하는 능력에 있습니다. 비동기 코드의 힘. 네트워크 요청이나 파일 읽기와 같은 I/O 작업을 고려하십시오. 이러한 작업을 동기적으로 실행하면 일반적으로 전체 프로그램이 차단되어 각 작업이 완료될 때까지 기다리게 됩니다. 반면, 비동기식 코드를 사용하면 이러한 작업을 동시에 실행할 수 있어 프로그램이 다른 작업을 처리할 수 있는 여유가 생깁니다.

위의 예에서 비동기식 접근 방식은 절반의 시간 안에 완료되어 낭비되는 시간을 효과적으로 최소화합니다. I/O 작업을 기다리고 있습니다.

동기 코드에 대한 wait 오용 자제

대기하는 동안 Excels I/O 작업을 처리할 때 동기 코드에 무분별하게 적용해서는 안 됩니다. CPU 바인딩된 작업이나 단순한 데이터 조작과 같은 동기 코드는 비동기 패러다임의 이점을 얻지 못하며 실제로 불필요한 오버헤드를 초래할 수 있습니다.
# Synchronous Way
download(url1)  # takes 5 sec.
download(url2)  # takes 5 sec.
# Total time: 10 sec.

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

동기 코드를 비동기로 캐스팅하는 것은 아무런 목적도 없으며 오류로 이어질 수 있습니다. 성능 저하.

장기 실행 동기 작업에 대한 특별 고려 사항

사용 시 고려해야 할 중요한 측면 asyncio는 비동기 생태계에 대한 장기 실행 동기 작업의 영향입니다. 실행하는 데 오랜 시간(예: 50ms 이상)이 걸리는 동기 작업은 실행 중인 모든 비동기 작업을 잠재적으로 정지시킬 수 있습니다.
# Synchronous Code That Should Remain Synchronous
def parse(html):
    # This function does not involve any I/O operations.
    links = extract_links_from_html(html)
    return links
로그인 후 복사

이러한 정지를 방지하려면 이러한 장기 실행 작업을 별도의 프로세스에서 실행하거나 비동기 컨텍스트 내에서 I/O 바인딩된 작업에 스레드 풀을 사용합니다.

결론적으로 Python 3.5의 Wait는 다음 작업을 처리할 때 신중하게 사용해야 합니다. 동시성의 이점을 활용하기 위한 I/O 작업입니다. 그러나 잠재적인 성능 저하 및 병목 현상을 방지하려면 비동기 생태계 내에서 동기 코드 및 장기 실행 작업을 수행하지 않는 것이 좋습니다. 이러한 원칙을 주의 깊게 고려하면 Python 3.5의 비동기 기능을 효과적으로 활용할 수 있습니다.

위 내용은 Python 3.5의 `await`를 언제 사용해야 하며 언제 사용하지 않아야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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