[python] aiohttp를 사용하여 비동기적으로 웹 데이터 저장하기
소개
파이썬의 asyncio 라이브러리와 aiohttp 라이브러리를 활용하여 비동기적으로 웹 데이터를 저장하는 방법을 알아보겠습니다. 비동기 방식을 사용하면 여러 웹 요청을 동시에 처리할 수 있어서 프로그램의 성능을 향상시킬 수 있습니다.
aiohttp 설치
먼저, aiohttp를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다.
$ pip install aiohttp
코드 예제
import aiohttp
import asyncio
API_URLS = ['https://api.example.com/data1', 'https://api.example.com/data2', 'https://api.example.com/data3']
async def save_web_data(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
data = await response.text()
# 데이터 저장 로직 수행
with open('data.txt', 'a') as f:
f.write(data + '\n')
async def main():
tasks = []
for url in API_URLS:
task = asyncio.ensure_future(save_web_data(url))
tasks.append(task)
await asyncio.gather(*tasks)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
이 코드는 API_URLS
리스트에 있는 여러 개의 API에서 데이터를 비동기적으로 가져와서 data.txt
파일에 저장하는 예제입니다. aiohttp.ClientSession()
객체를 사용하여 세션을 만들고, session.get()
메서드를 사용하여 비동기적으로 데이터를 가져옵니다.
await response.text()
를 사용하여 응답에서 텍스트 데이터를 추출하고, 이를 파일에 저장합니다.
실행하기
위의 코드를 web_data.py
파일에 저장한 뒤, 다음 명령을 사용하여 실행할 수 있습니다.
$ python web_data.py
결론
aiohttp와 asyncio를 사용하여 비동기적으로 웹 데이터를 저장하는 방법을 알아보았습니다. 이를 통해 여러 개의 웹 요청을 동시에 처리할 수 있으며, 프로그램의 성능을 향상시킬 수 있습니다. 데이터를 가져와서 저장하는 로직은 실제로 사용하는 서비스에 따라 다양하게 구현될 수 있습니다.