asyncio의 queue를 써보자!

asyncio는 비동기 프로그래밍을 위한 라이브러리. 모든 것을 정리하자니 귀찮아서 샘플 코드 하나로 끝낸다.

import asyncio
import sys
from functools import partial

def handle_stdin(queue):
    data = sys.stdin.readline().strip()
    if data == 'q':
        loop = asyncio.get_event_loop()
        loop.remove_reader(sys.stdin)
    asyncio.ensure_future(queue.put(data)) 

async def tick(queue):
    stop = False
    while not stop:
        
        data = await queue.get()
        print('Data received: {}'.format(data))
        if data == 'q':
            stop = True
    print("tick finished.")

def main(): 
    queue = asyncio.Queue()
    loop = asyncio.get_event_loop()
    loop.add_reader(sys.stdin, partial(handle_stdin, queue))
    loop.run_until_complete(tick(queue))
    loop.close()

if __name__ == '__main__':
    main()`

asyncio: 비동기 프로그래밍과 관련된 함수와 클래스를 포함합니다.

sys: 시스템 특정 파라미터와 함수에 접근할 수 있도록 합니다.

partial: 함수를 부분적으로 호출할 수 있게 해줍니다.

  1. handle_stdin 함수:
  2. tick 함수:
  3. main 함수:
  4. if __name__ == '__main__'::

**asyncio.Queue**는 async/await 문법에 적합하게 설계되어 있어서 비동기 작업에서의 데이터 교환에 최적화되어 있습니다.

주요 특징: