[Python] ensure_future

2021. 10. 23. 22:05·Language/Python
반응형
Untitled 0cf830be727c48189683f48ec9a7b784

asyncio를 사용하다가 혼동되는 부분이 많다. 대표적으로는 Task와 Future의 차이가 있을 것이다. asyncio.create_task()와 asyncio.ensure_future() 또한 혼동되는 부분이다. 예제 코드를 찾아보면 ensure_future를 사용하는 코드도 간간히 볼 수 있었다. 두 함수 모두 코루틴을 실행하기 위해 사용될 수 있기 때문에 혼용해서 쓰는 경우가 많은 것 같다. 각 함수의 역할을 더 정확히 알아보고 이에 대해 정리했다.

​x
import asyncio
​
async def f():
    pass
​
coro = f()
loop = asyncio.get_event_loop()
​
task1 = loop.create_task(coro)
assert isinstance(task1, asyncio.Task)
​
task2 = asyncio.ensure_future(coro)
assert isinstance(task2, asyncio.Task)
​
task3 = asyncio.ensure_future(task1)
assert task3 is task1

두 함수의 차이점을 알아보기 위해 위 코드를 작성했다. 코드를 살펴보면 loop.create_task()와 asyncio.ensure_future() 함수를 사용해 코루틴 f()를 각각 task1, task2로 만들었다. 마지막 코드를 보면 create_task()로 만들어진 task1을 ensure_future()의 인자로 전달해 만든 task3이 task1과 동일한 것을 알 수 있다. 즉 인자로 들어온 task1을 그대로 반환한 것이다.

ensure_future() 함수는 인자가 코루틴일 경우 Task를 반환하고, 인자가 Task나 Future의 경우 인자 그대로 반환한다. 이것이 어떤 의미가 있을까? 해당 함수의 동작을 보면 ensure_future()가 반환하는 값은 항상 Future가 되는 것을 알 수 있다. Future에만 정의된 메서드를 호출해야할 경우 ensure_future함수를 사용해 Future일 수 있는 인스턴스가 Future형이라는 것을 확실히 알 수 있다.

따라서 일반적으로 태스크를 생성해야하는 상황에서는 create_task()를 사용하는 것이 적합하다.

 

칼렙 하팅, Using Asyncio in Python. Understanding Python's Asynchronous Programming Features, 한빛 미디어

반응형
저작자표시 비영리 변경금지
'Language/Python' 카테고리의 다른 글
  • [Python] pandas
  • [Python] Dependency Injector (1)
  • [Python] Queue
  • [Python] GIL
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • Spring Framework (2)
        • Spring (2)
        • JPA (2)
        • Spring Security (0)
      • Language (50)
        • Java (10)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (1)
      • 프로젝트 (1)
      • Book (1)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C++
    NUXT
    클래스
    PS
    JavaScript
    FPS
    웹
    mscoco
    Unreal Engine
    redis
    파이썬
    게임 개발
    CPP
    Python
    딥러닝
    JS
    pytorch
    프로그래머스
    블루프린트
    자바
    map
    MySQL
    php
    C
    언리얼엔진4
    select
    알고리즘
    게임
    Unreal
    memcached
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[Python] ensure_future
상단으로

티스토리툴바