안녕하세요. 인천고래입니다.
이번 글에서는 비동기식 프로그래밍을 하는데 필요한 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 사용법을 통해서 비동기식 프로그래밍 호출되는 방식에 대해 알아보았습니다.
감사합니다.
'Python Code' 카테고리의 다른 글
파이썬 자동매매 기초 : 조건검색식 가져오기 (0) | 2024.05.28 |
---|---|
Python 모듈의 버전을 확인하는 방법 (0) | 2024.05.10 |
데이터프레임을 엑셀로 변환시 메모리 에러가 발생하는 이유에 대하여. (0) | 2024.04.05 |
32비트 가상환경과 64비트 가상환경 구축 명령어의 차이점에 대하여 (0) | 2024.04.04 |
아나콘다에서 32비트 가상환경 만들기 (0) | 2024.04.04 |
댓글