경험상 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
다중 처리 사용: 별도의 프로세스에서 장기 실행 작업을 실행하고 결과를 기다립니다.
위 내용은 Python 3.5의 asyncio용 `await` 기능을 언제 사용해야 하며 언제 피해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!