동기(sync)
import time
def delivery(name,mealtime):
print(f"{name}에게 배달완료!")
time.sleep(mealtime)
print(f"{name}식사 완료, {mealtime}시간 소요...")
print(f"{name}그릇수거 완료")
def main():
#A라는 사람은 음식을 3초동안 먹는다.
delivery("A",5)
#B라는 사람은 음식을 4초동안 먹는다.
delivery("B",4)
#C라는 사람은 음식을 5초동안 먹는다.
delivery("C",3)
if __name__=="__main__":
start = time.time()
result=main()
print("실행시간 :", time.time() - start,"seconds")
$ python sync_delivery.py
A에게 배달완료!
A식사 완료, 5시간 소요...
A그릇수거 완료
B에게 배달완료!
B식사 완료, 4시간 소요...
B그릇수거 완료
C에게 배달완료!
C식사 완료, 3시간 소요...
C그릇수거 완료
실행시간 : 12.031441926956177 seconds
작성된 순서 드대로 즉,delivery("A",5),delivery("B",4),delivery("C",3)라는 함수가 순서대로 실행되었기에 동기적으로 실행되었다고 할 수 있다.
비동기(async)
import time
import asyncio
async def delivery(name,mealtime):
print(f"{name}에게 배달완료!")
await asyncio.sleep(mealtime)
print(f"{name}식사 완료, {mealtime}시간 소요...")
print(f"{name}그릇수거 완료")
async def main():
await asyncio.gather(
delivery("A",5),
delivery("B",4),
delivery("C",3)
)
if __name__=="__main__":
start = time.time()
asyncio.run(main())
print("실행시간 :", time.time() - start,"seconds")
$ python async_delivery.py
A에게 배달완료!
B에게 배달완료!
C에게 배달완료!
C식사 완료, 3시간 소요...
C그릇수거 완료
B식사 완료, 4시간 소요...
B그릇수거 완료
A식사 완료, 5시간 소요...
A그릇수거 완료
실행시간 : 5.001014947891235 seconds
delivery("A",5),delivery("B",4),delivery("C",3)라는 함수들의 실행순서가 보장이 되지 않고있다.한 사람의 식사시간이 끝나야만 배달을 가는 순차적인 행동을 없애 프로그램 자체의 실행시간을 줄였다고 볼 수 있다.