상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 비동기 프로그래밍을 위한 'generator'의 사용법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
비동기 프로그래밍은 프로그램이 I/O 작업이나 네트워크 요<a href='https://sangseek.com/sangseeks/청과/ko'>청과</a> 같은 시간이 오래 걸리는 작업을 수행할 때, 다른 작업을 동시에 수행할 수 있도록 해주는 프로그래밍 방식입니다. Python에서는 `asyncio`와 함께 `generator`를 사용하여 비동기 프로그래밍을 구현할 수 있습니다. 이 글에서는 `generator`의 기본 개념과 비동기 프로그래밍에서의 사용법에 대해 자세히 설명하겠습니다. Generator란? Generator는 Python에서 이터레이터를 생성하는 간단한 방법입니다. 일반적인 함수와 달리, generator 함수는 `yield` 키워드를 사용하여 값을 반환합니다. 함수가 호출되면, 실행이 중단되고 `yield`에서 반환된 값이 호출자에게 전달됩니다. 이후 함수가 다시 호출되면, 이전 상태에서부터 실행이 재개됩니다. ```python def simple_generator(): yield 1 yield 2 yield 3 gen = simple_generator() print(next(gen)) 1 print(next(gen)) 2 print(next(gen)) 3 ``` 위의 예제에서 `simple_generator` 함수는 1, 2, 3을 순차적으로 반환합니다. `next()` 함수를 사용하여 generator에서 값을 가져올 수 있습니다. 비동기 프로그래밍에서의 Generator Python의 비동기 프로그래밍에서는 `asyncio` 모듈과 함께 `async def`와 `await` 키워드를 사용하여 <a href='https://sangseek.com/sangseeks/비동기 함수/ko'>비동기 함수</a>를 정의합니다. 하지만 Python 3.5 이전 버전에서는 `generator`를 사용하여 비동기 프로그래밍을 구현할 수 있었습니다. 이 방식은 `yield`를 사용하여 비동기 작업을 수행하고, `yield`가 호출될 때까지 다른 작업을 수행할 수 있게 해줍니다. 비동기 Generator의 예 아래는 비동기 작업을 수행하는 generator의 예입니다. 이 예제에서는 `time.sleep()` 대신 `asyncio.sleep()`을 사용하여 비동기적으로 대기합니다. ```python import asyncio async def async_task(name, delay): print(f"Task {name} started") await asyncio.sleep(delay) print(f"Task {name} completed") async def main(): tasks = [ async_task("A", 2), async_task("B", 1), async_task("C", 3) ] await asyncio.gather(*tasks) asyncio.run()을 사용하여 main() 함수를 실행합니다. asyncio.run(main()) ``` 위의 코드에서 `async_task` 함수는 비동기적으로 실행되는 작업을 정의합니다. `main` 함수는 여러 개의 비동기 작업을 동시에 실행하기 위해 `asyncio.gather()`를 사용합니다. 이 경우, 각 작업은 서로의 완료를 기다리지 않고 동시에 실행됩니다. Generator와 Asyncio의 조합 Python 3.5 이전 버전에서는 `asyncio`와 generator를 조합하여 비동기 프로그래밍을 구현할 수 있었습니다. 아래는 그 예시입니다. ```python import asyncio def generator_task(name, delay): print(f"Task {name} started") yield from asyncio.sleep(delay) print(f"Task {name} completed") def main(): loop = asyncio.get_event_loop() tasks = [ loop.run_in_executor(None, generator_task, "A", 2), loop.run_in_executor(None, generator_task, "B", 1), loop.run_in_executor(None, generator_task, "C", 3) ] loop.run_until_complete(asyncio.gather(*tasks)) main() ``` 위의 예제에서는 `generator_task` 함수를 정의하고, `yield from`을 사용하여 비동기 작업을 수행합니다. `main` 함수에서는 이벤트 루프를 생성하고, 여러 개의 작업을 동시에 실행합니다. 결론 Python에서 비동기 프로그래밍을 구현하는 방법은 여러 가지가 있으며, `generator`는 그 중 하나입니다. `asyncio` 모듈과 함께 사용하면 비동기 작업을 효율적으로 처리할 수 있습니다. Python 3.5 이후 버전에서는 `async`와 `await` 키워드를 사용하여 더 <a href='https://sangseek.com/sangseeks/직관/ko'>직관</a>적이고 간결한 비동기 코드를 작성할 수 있게 되었습니다. 그러나 여전히 `generator`를 사용한 비동기 프로그래밍은 유용한 기술이며, 특히 기존 코드와의 호환성을 유지해야 할 때 유용합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기