인프런 커뮤니티 질문&답변

밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)

동기 vs 비동기

비동기 함수를 동기적인 실행으로 만드는 부분 질문입니다

작성

·

161

1

안녕하세요. 강의 잘 보고 있습니다. 다름이 아니라 [섹션1 - 동기 vs 비동기] 강의 내용 중 "비동기 함수로 정의된 것들을 동기적인 실행으로 만드는 부분"을 설명해주셨는데요!

예를 들어, 수업 내용에서 언급된 아래와 같은 코드일 때입니다.

 

import asyncio

async def delivery(name, mealtime):
    print("start:", name)
    await asyncio.sleep(mealtime)
    print("end")

async def main():
    await delivery('A', 10)
    await delivery('B', 5)
    await delivery('C', 3)

그러면 위 코드를 async def가 아닌 일반적인 동기 함수 def 로 정의해서 아래처럼 동기적으로 프로그래밍한 것이랑 성능적인 차이가 있나요? 비동기 함수로 정의하고 굳이 동기적인 프로그래밍을 작성하는 경우가 예시로 뭐가 있으려나요..? 단순히 생각했을 때 어차피 동기적인 프로그래밍으로 작성할 것이라면 애초에 동기함수로 작성하는 게 코드를 읽는 다른 사람들에게도 좀 더 헷갈리지 않게 하는 게 아닐까..싶은데 궁금합니다!


import time

def delivery(name, mealtime):
    print("start:", name)
    time.sleep(mealtime)
    print("end")

async def main():
    delivery('A', 10)
    delivery('B', 5)
    delivery('C', 3)

답변 2

0

start: A

start: B

start: C

end B

end C

end A

time : 3.0121638774871826

코드 좀 추가해봤습니다

 

0

async def delivery(name, mealtime):
    print("start:", name)
    await asyncio.sleep(mealtime)
    print("end", name)


async def main():
    start_time = time.time()
    await asyncio.gather(delivery('A', 3),
                         delivery('B', 1),
                         delivery('C', 2))
    print(f"time :", time.time()-start_time)

asyncio.run(main())
밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

질문하기