pbj0812의 코딩 일기

[PYTHON] asyncio를 통한 비동기 처리 실습 본문

ComputerLanguage_Program/PYTHON

[PYTHON] asyncio를 통한 비동기 처리 실습

pbj0812 2020. 5. 26. 23:55

0. 목표

 - python 비동기 처리 실습

1. 실습

 - jupyter notebook 대신 python 사용 필요

  * jupyter notebook에서 하기 위해서는 링크 참고

 - python은 3.5 이상 버전 필요

 1) 동기 처리

  (1) 코드 작성

   - 컴퓨터 끄는 알바를 하는데 한 대가 종료되기 까지 5초가 걸리고, 컴퓨터가 종료된 이후에 다음 컴퓨터를 종료시키는 형태

import time

def off_the_computer(n):
    print(n,'번 째 컴퓨터 종료 시작')
    time.sleep(5)
    print(n,'번 째 컴퓨터 종료 완료')

def start_alba():
    start = time.time()
    off_the_computer(1)
    off_the_computer(2)
    off_the_computer(3)
    end = time.time()
    print(f'>>> 동기 처리 총 소요 시간: {end - start}')

if __name__ == '__main__':
    start_alba()

 (2) 실행 결과

  - 1대에 5초씩 3대를 종료 하였으니 약 15초 소요

1 번 째 컴퓨터 종료 시작
1 번 째 컴퓨터 종료 완료
2 번 째 컴퓨터 종료 시작
2 번 째 컴퓨터 종료 완료
3 번 째 컴퓨터 종료 시작
3 번 째 컴퓨터 종료 완료
>>> 동기 처리 총 소요 시간: 15.009671926498413

 2) 비동기 처리

  (1) 코드 작성

   - 마찬가지로 한 대를 종료하는 데 5초가 걸리지만 종료되기를 기다리지 않고 다른 컴퓨터도 종료시키는 형태

import time
import asyncio

async def off_the_computer(n):
    print(n,'번 째 컴퓨터 종료 시작')
    await asyncio.sleep(5)
    print(n,'번 째 컴퓨터 종료 완료')

async def start_alba():
    start = time.time()
    await asyncio.wait([
        off_the_computer(1),
        off_the_computer(2),
        off_the_computer(3)
    ])
    end = time.time()
    print(f'>>> 비동기 처리 총 소요 시간: {end - start}')

if __name__ == '__main__':
    asyncio.run(start_alba())

  (2) 실행 결과

   - wait안에 list 형식으로 넣으니 랜덤하게 종료된 것을 확인할 수 있음

   - 컴퓨터가 종료되길 기다리지 않고 다른 컴퓨터들에도 작업을 걸었으니 5초가 걸림

3 번 째 컴퓨터 종료 시작
1 번 째 컴퓨터 종료 시작
2 번 째 컴퓨터 종료 시작
3 번 째 컴퓨터 종료 완료
1 번 째 컴퓨터 종료 완료
2 번 째 컴퓨터 종료 완료
>>> 비동기 처리 총 소요 시간: 5.004363059997559

2. 참고

 - asyncio로 비동기 처리하기

Comments