>  기사  >  백엔드 개발  >  Python 3.5의 asyncio용 `await` 기능을 언제 사용해야 하며 언제 피해야 합니까?

Python 3.5의 asyncio용 `await` 기능을 언제 사용해야 하며 언제 피해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-17 04:41:03815검색
When should you use Python 3.5's `await` feature for asyncio, and when should you avoid it? 
비동기 후보 결정

경험상 I/를 수행하는 모든 기능을 기다리는 것이 좋습니다. O 네트워크 액세스 또는 파일 읽기와 같은 작업. 이러한 작업은 잠재적으로 장기간 동안 동기 코드를 차단할 수 있습니다. 이를 기다리면 asyncio는 다른 작업을 동시에 수행할 수 있습니다.

비동기 코드의 장점

아래 코드 조각에서 볼 수 있듯이 비동기 코드는 다음과 관련된 작업 속도를 크게 높일 수 있습니다. 다중 I/O 호출:

혼합 비동기/동기 코드를 사용하는 함수

비동기 함수는 비동기 함수와 동기 함수를 모두 호출할 수 있습니다. 그러나 I/O 작업을 수행하지 않는 동기 코드를 기다리는 것은 이점이 없습니다. 이로 인해 불필요한 오버헤드가 발생할 수 있습니다.

# 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: only 5 sec. (+ little overhead for using asyncio)

장기 실행 동기 작업 방지

비동기 내에서 장기 실행 동기 작업(> 50ms)을 피하는 것이 중요합니다. 다른 모든 비동기 작업을 정지할 수 있기 때문입니다. 이러한 작업을 효율적으로 처리하려면:

async def extract_links(url):  

    # async_download() was created async to get benefit of I/O
    html = await async_download(url)  

    # parse() doesn't work with I/O, there's no sense to make it async
    links = parse(html)  

    return links

다중 처리 사용: 별도의 프로세스에서 장기 실행 작업을 실행하고 결과를 기다립니다.

  • ThreadPoolExecutor 사용: 웹 서버에 대한 요청과 같은 I/O 바인딩 동기 작업의 경우:

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

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