강의

멘토링

커뮤니티

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

김경민님의 프로필 이미지
김경민

작성한 질문수

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

파이썬 코루틴의 이해

코루틴 흐름에 관한 질문

작성

·

258

0

안녕하세요 1-3 강의를 듣고 따라하는 중에 의문점이 들어 질문을 남깁니다.

 

공통 코드

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():
    task1 = asyncio.create_task(delivery('경민', 1))
    task2 = asyncio.create_task(delivery('윤민', 2))
   #-----변경할 부분------#
    #await task2
    #print(1)
    #await task1
   #--------------------#
if __name__ == '__main__':    
    start = time.time()
    asyncio.run(main())
    end = time.time()
    print(end-start)

질문 1. create_task메서드 실행만 했을 경우 코루틴 함수의 await전까지 실행되는 이유

공통 코드 실행 결과:

>>> 경민에게 배달 완료

>>> 윤민에게 배달 완료

>>> 0.0000510...

개인생각 : create_task는 실행은 하지 않고 선언만 한 것인데 await전까지 왜 실행이 되나,,

 

 

질문 2. create_task메서드의 선언 순서 고정으로 출력되는 이유

#-----변경할 부분------#
    await task2
    #print(1)
    await task1
   #--------------------#

>>> 경민에게 배달 완료

>>> 윤민에게 배달 완료

개인 생각: 윤민에게 먼저 배달을 해야하는 것이 아닌가

 

질문 3. 다음 결과의 이유

#-----변경할 부분------#
    await task2
    print(1)
    await task1
   #--------------------#

>>> 경민 배 완

>>> 윤민 배 완

>>> 경 식 완

>>> 경 그 수거

>>> 윤 식 완

>>> 윤 그 수거

>>> 1

 

개인 생각: 질문1,2의 경험 없이 생각을 해보면

경민에게 배달하고 1이 출력된 다음에 윤민에게 배달을 해야하는게 아닌가 하는 의문이 듭니다.

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
김경민님의 프로필 이미지
김경민

작성한 질문수

질문하기