반응형
13.1 async와 await 키워드
비동기 함수는 async def
문으로 정의됩니다. 비동기 함수 내부에서 다른 비동기 함수의 실행을 기다리려면 await
키워드를 사용합니다.
비동기 함수 정의
import asyncio
async def say_hello():
print("Hello")
await asyncio.sleep(1)
print("World")
# 이벤트 루프 실행
asyncio.run(say_hello())
13.2 asyncio 모듈
asyncio
모듈은 비동기 I/O, 이벤트 루프, 태스크, 동기화를 지원하는 기능을 제공합니다.
비동기 함수 실행
import asyncio
async def main():
print("Start")
await asyncio.sleep(1)
print("End")
asyncio.run(main())
여러 비동기 함수 실행
import asyncio
async def first():
print("First start")
await asyncio.sleep(2)
print("First end")
async def second():
print("Second start")
await asyncio.sleep(1)
print("Second end")
async def main():
await asyncio.gather(first(), second())
asyncio.run(main())
태스크 생성
import asyncio
async def say_hello():
print("Hello")
await asyncio.sleep(1)
print("World")
async def main():
task = asyncio.create_task(say_hello())
await task
asyncio.run(main())
13.3 비동기 제너레이터와 컴프리헨션
비동기 제너레이터는 async
키워드를 사용하여 정의되며, yield
대신 yield
키워드와 함께 await
키워드를 사용할 수 있습니다.
비동기 제너레이터
import asyncio
async def async_generator():
for i in range(3):
await asyncio.sleep(1)
yield i
async def main():
async for value in async_generator():
print(value)
asyncio.run(main())
비동기 컴프리헨션
import asyncio
async def async_generator():
for i in range(3):
await asyncio.sleep(1)
yield i
async def main():
result = [value async for value in async_generator()]
print(result)
asyncio.run(main())
비동기 프로그래밍 예제
다음은 비동기 프로그래밍을 사용하여 여러 웹 페이지를 동시에 다운로드하는 예제입니다.
aiohttp 설치
pip install aiohttp
비동기 웹 페이지 다운로드
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
urls = [
"http://example.com",
"http://example.org",
"http://example.net"
]
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks)
for result in results:
print(result[:100]) # 첫 100글자만 출력
asyncio.run(main())
반응형
'Python 문법 > Python 기본 문법(3.10 기준)' 카테고리의 다른 글
[python3.10 기본] 15. 테스트와 디버깅 (0) | 2024.07.02 |
---|---|
[python3.10 기본] 14. 형 힌팅과 타입 검사 (0) | 2024.07.02 |
[python3.10 기본] 12. 표준 라이브러리 및 외부 라이브러리 사용 (0) | 2024.07.01 |
[python3.10 기본] 11. 모듈과 패키지 (1) | 2024.07.01 |
[python3.10 기본] 9. 예외 처리 (1) | 2024.07.01 |