일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바네트워크
- spring data jpa
- oracle
- android
- 데이터베이스
- spring integration
- chatGPT's answer
- GPT-4's answer
- 역학
- Database
- jpa
- 인프라
- 코틀린
- JVM
- 파이썬
- 시스템
- NIO
- 리눅스
- 자바
- flet
- write by chatGPT
- 웹 크롤링
- 소프트웨어공학
- 유닉스
- python
- 자바암호
- Java
- 고전역학
- write by GPT-4
- kotlin
- Today
- Total
Akashic Records
11.3 비동기 프로그래밍 본문
파이썬의 비동기 프로그래밍은 일반적으로 asyncio 라이브러리를 사용하여 구현합니다. 비동기 프로그래밍은 여러 작업을 동시에 실행하면서, I/O 바운드 작업을 효율적으로 처리하는 데 유용합니다. 비동기 프로그래밍에서는 이벤트 루프를 사용하여 작업을 스케줄링하고, async와 await 키워드를 사용하여 비동기 함수를 작성합니다.
간단한 비동기 프로그래밍 예제는 다음과 같습니다:
import asyncio
async def say_hello(name, delay):
await asyncio.sleep(delay)
print(f"Hello, {name}!")
async def main():
task1 = asyncio.create_task(say_hello("Alice", 2))
task2 = asyncio.create_task(say_hello("Bob", 1))
task3 = asyncio.create_task(say_hello("Charlie", 3))
await asyncio.gather(task1, task2, task3)
# 이벤트 루프 실행
asyncio.run(main())
위 코드에서는 세 개의 비동기 함수 say_hello를 실행하고, 각각 다른 지연 시간을 설정했습니다. 이벤트 루프는 지연 시간이 끝날 때까지 기다린 후 해당 함수가 완료되면 결과를 출력합니다.
비동기 프로그래밍에서는 주로 다음과 같은 기능을 사용합니다:
- async def: 비동기 함수를 정의합니다.
- await: 비동기 함수를 호출하고, 작업이 완료될 때까지 기다립니다.
- asyncio.create_task(): 비동기 함수를 실행하기 위한 태스크를 생성합니다.
- asyncio.gather(): 여러 비동기 태스크를 병렬로 실행하고, 모든 작업이 완료될 때까지 기다립니다.
- asyncio.sleep(): 비동기 지연을 구현하는 데 사용됩니다. 일반적인 time.sleep()과 달리, 이 함수는 이벤트 루프를 차단하지 않고 다른 작업을 실행할 수 있습니다.
- asyncio.run(): 주어진 코루틴을 실행하고 완료될 때까지 기다리는 이벤트 루프를 시작합니다.
비동기 프로그래밍은 웹 서버, 네트워크 I/O, 웹 스크래핑 등 I/O 바운드 작업에서 성능 향상을 얻는 데 유용합니다.
비동기 프로그래밍은 파일 처리, 웹 요청 및 데이터베이스 작업과 같은 I/O 바운드 작업에서 특히 유용합니다. 이러한 작업에서는 작업의 완료를 기다리는 동안 CPU 리소스를 효율적으로 활용하고, 여러 작업을 동시에 수행할 수 있습니다.
예를 들어, aiohttp 라이브러리를 사용하여 비동기 웹 요청을 처리하는 방법을 살펴보겠습니다. 먼저 aiohttp를 설치해야 합니다:
pip install aiohttp
그런 다음 비동기 웹 요청을 수행하는 예제를 작성합니다:
import asyncio
import aiohttp
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def main():
url = "https://api.github.com"
response_text = await fetch(url)
print(response_text)
asyncio.run(main())
위 코드에서는 aiohttp.ClientSession()을 사용하여 비동기 HTTP 클라이언트 세션을 생성하고, session.get()을 사용하여 비동기 GET 요청을 보냅니다. await 키워드를 사용하여 요청이 완료되길 기다립니다.
비동기 프로그래밍을 사용하여 웹 소켓, 데이터베이스 연결 등의 작업도 처리할 수 있습니다. 예를 들어, aiomysql 라이브러리를 사용하여 MySQL 데이터베이스와 비동기로 상호 작용할 수 있습니다.
비동기 프로그래밍은 또한 asyncio.Queue와 같은 동시성 제어 기능을 제공합니다. 이를 사용하여 작업자와 작업 큐를 관리하거나, 세마포어(semaphore)를 사용하여 동시 실행되는 작업 수를 제한할 수 있습니다.
비동기 프로그래밍의 주요 장점은 작업의 완료를 기다리는 동안 다른 작업을 수행하여 전체 애플리케이션의 성능을 향상시키는 데 있습니다. 그러나 복잡한 애플리케이션에서는 비동기 코드의 가독성과 유지 관리가 어려울 수 있으므로, 적절한 상황에서만 사용하는 것이 좋습니다.
'Python for Beginners' 카테고리의 다른 글
12.2 Tkinter 위젯 (0) | 2023.04.04 |
---|---|
12.1 Tkinter 소개 (0) | 2023.04.04 |
11.2 멀티스레딩 및 멀티프로세싱 (0) | 2023.04.01 |
11.1 소켓 프로그래밍 (0) | 2023.04.01 |
10.3 ORM(Object-Relational Mapping) (0) | 2023.03.31 |