본문 바로가기
Python Code

비동기식 프로그래밍을 위한 async/await, asyncio 사용법

by quantWhale 2024. 4. 5.
반응형

안녕하세요. 인천고래입니다.

이번 글에서는 비동기식 프로그래밍을 하는데 필요한 async/await 키워드 사용법에 대해 알아보는 시간을 가져보겠습니다.

 

async/await 사용법

async와 await는 Python 3.5 이상에서 비동기 프로그래밍을 구현하기 위해 사용되는 키워드입니다. 이들을 사용하여 I/O 바운드 작업을 효율적으로 처리할 수 있습니다.

async

  • async 키워드는 함수 앞에 사용되며, 해당 함수를 '코루틴(coroutine)'으로 만듭니다.
    코루틴은 비동기로 실행될 수 있는 함수입니다.
  • async 함수는 호출될 때 실행되지 않고, 대신에 'Future 객체'를 반환합니다. 실제 실행을 위해서는 await, asyncio.run(), event_loop.run_until_complete() 등을 사용해야 합니다.

await

  • await 키워드는 async로 정의된 함수 내에서만 사용할 수 있으며, 비동기로 실행될 코루틴의 완료를 기다립니다.
  • await은 비동기 함수가 결과를 반환할 때까지 기다리며, 해당 함수의 실행이 완료되면 결과를 반환받습니다.

 

예제: async와 await 사용

import asyncio

async def fetch_data():
    print("데이터를 가져오는 중...")
    await asyncio.sleep(2)  # 비동기적으로 2초 대기
    print("데이터 가져오기 완료")
    return {'data': 1}

async def main_function():
    data = await fetch_data()  # fetch_data 코루틴의 완료를 기다림
    print(data)

# 이벤트 루프 실행
asyncio.run(main_function())

 

asyncio 사용법

asyncio는 비동기 I/O를 위한 Python 표준 라이브러리로, 비동기 프로그래밍을 위한 고수준 API를 제공합니다.

 

이벤트 루프(Event Loop)

  • asyncio의 핵심 컴포넌트로, 프로그램이 실행되는 동안 계속 실행되는 루프입니다.
  • 비동기 작업을 관리하고, 실행할 코루틴을 스케줄링하며, 완료된 코루틴의 결과를 처리합니다.

asyncio.run()

  • Python 3.7 이상에서 사용 가능한 함수로, 주어진 코루틴을 실행하고 완료될 때까지 기다립니다.
  • asyncio.run()은 이벤트 루프를 생성하고, 코루틴을 실행한 후, 루프를 닫습니다.

 

예제: asyncio와 aiohttp 사용

import asyncio
import aiohttp

async def fetch_url(url):
    async with aiohttp.ClientSession() as session:  # aiohttp 세션 생성
        async with session.get(url) as response:  # URL로부터 비동기적으로 GET 요청
            return await response.text()  # 응답 본문을 비동기적으로 읽음

async def main():
    url = "http://python.org"
    data = await fetch_url(url)
    print(data[:100])  # 받아온 데이터의 앞부분만 출력

asyncio.run(main())

 

위 예제에서는 asyncio와 aiohttp를 사용하여 비동기적으로 웹 페이지를 가져오는 간단한 스크립트를 구현했습니다. asyncio를 사용함으로써 복잡한 I/O 작업을 효율적으로 관리할 수 있으며, 프로그램의 전반적인 성능을 향상시킬 수 있습니다.

 

오늘은 async/await, asyncio 사용법을 통해서 비동기식 프로그래밍 호출되는 방식에 대해 알아보았습니다.

감사합니다.

 

반응형
-

댓글