코루틴 3

Python threading.local 와 ContextVar 비교

threading.local 와 ContextVar 는 둘 다 데이터를 격리하고 동적으로 할당한다는 점에서 유사한 목적을 가지고 있지만 사용되는 상황과 특징이 조금 다르다. 이 글에서는 둘의 공통점과 차이점을 예제 코드와 함께 비교해보고자 한다. threading.local threading.local 은 각 스레드마다 고유한 데이터를 가질 수 있게 해준다. 아래 예제 코드를 살펴보자. import threading # threading.local 객체 생성 thread_local_data = threading.local() def 스레드_울음소리(): thread_local_data.value = "끼룩끼룩!" def 스레드_동물호출(): value = getattr(thread_local_data, ..

파이썬 코루틴 활용

웹사이트 데이터 가져오기 1. session을 통해 url에 접속한다 2. request.get을 통해 데이터를 가져온다 3. session을 닫고 걸린 시간을 측정한다 * session을 간편하게 닫기 위해 with문을 사용했다. with문을 사용하면 with 블록을 벗어나는 순간 자동으로 close되어 편리하다. 4. 일반 코드와 코루틴 코드의 결과를 비교해본다 일반 코드의 경우(동기) >>> 15.04025387763977 초 ''' 동기로 코드를 작성할 경우 15.04025387763977 초 소요 ''' import requests import time def fetcher(session, url): with session.get(url) as response: return response.te..

파이썬 코루틴

루틴이란? 일련의 명령 흐름 (코드의 흐름) 메인 루틴 프로그램의 메인 코드의 흐름 서브 루틴 ( = 함수 ) 함수나 메서드 (메인 루틴을 보조하는 역할) 하나의 진입점과 하나의 탈출점이 있는 루틴 코루틴 서브루틴의 일반화된 형태 다양한 진입점과 다양한 탈출점이 있는 루틴 await에 의해 진입과 탈출점이 추가됨 비동기적 코드를 가능하게 함 await 은 어웨이터블 객체 앞에 사용한다 어웨이터블 객체는 코루틴, 태스크 및 퓨처를 의미한다 코루틴 함수 time.sleep() → X asyncio.sleep() → O 함수 정의 시 async 를 붙이는 경우 → O 태스크 객체 태스크를 예약할 때 사용 task1 = asyncio.create_task(func()) await task1 # 이렇식으로 코드 ..