[uvloop] deprecated asyncio.iscoroutinefunction을 inspect 모듈로 교체
PR 링크: MagicStack/uvloop#705 상태: Merged | 변경: +3 / -3
들어가며
Python 생태계의 deprecation 주기는 라이브러리 유지보수자에게 꾸준한 주의를 요구합니다. asyncio.iscoroutinefunction은 Python 3.12에서 deprecated되었고, Python 3.14에서 제거될 예정입니다. uvloop은 CPython의 asyncio 이벤트 루프를 대체하는 고성능 라이브러리로, 이러한 deprecation을 방치하면 향후 Python 버전에서 런타임 에러가 발생합니다. 이번 PR은 이 deprecated API를 inspect.iscoroutinefunction으로 안전하게 교체합니다.
핵심 코드 분석
1. import 선언 변경 (stdlib.pxi)
Before:
cdef aio_iscoroutinefunction = asyncio.iscoroutinefunction
After:
cdef inspect_iscoroutinefunction = inspect.iscoroutinefunction
uvloop은 Cython으로 작성되어 .pxi 파일에서 Python 표준 라이브러리 함수를 cdef로 캐싱합니다. asyncio 모듈에서 가져오던 함수를 inspect 모듈로 전환했습니다.
2. 호출부 업데이트 (loop.pyx)
Before:
def run_in_executor(self, executor, func, *args):
if aio_iscoroutine(func) or aio_iscoroutinefunction(func):
raise TypeError("coroutines cannot be used with run_in_executor()")
After:
def run_in_executor(self, executor, func, *args):
if aio_iscoroutine(func) or inspect_iscoroutinefunction(func):
raise TypeError("coroutines cannot be used with run_in_executor()")
run_in_executor와 add_signal_handler 두 곳에서 동일한 패턴으로 교체했습니다. 두 메서드 모두 코루틴이 실수로 전달되는 것을 방지하는 방어 코드입니다.
왜 이게 좋은가
-
미래 호환성 확보: Python 3.14에서
asyncio.iscoroutinefunction이 제거되면 uvloop이 즉시 깨지게 됩니다. 이 PR은 해당 위험을 사전에 제거합니다. -
의미적으로 더 정확:
inspect.iscoroutinefunction은 원래부터 함수의 코루틴 여부를 검사하기 위한 표준 API입니다.asyncio버전은 사실상 이를 래핑한 것에 불과했습니다. -
Cython 특유의 패턴 유지:
cdef로 함수 참조를 캐싱하는 uvloop의 관행을 따르면서도 올바른 소스 모듈을 참조하도록 수정했습니다.
정리
3개 파일, 3줄의 변경이지만 uvloop의 Python 3.14 호환성을 보장하는 필수적 마이그레이션입니다. deprecated API의 조기 교체는 라이브러리 사용자들이 Python 업그레이드 시 unexpected breakage를 겪지 않도록 하는 유지보수의 핵심입니다.
참고 자료
이 글은 AI(Claude)의 도움을 받아 작성되었으며, 실제 PR의 코드 변경 사항을 기반으로 분석한 내용입니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [Triton] Proton에서 선택적 커널 메타데이터 기록 및 커스텀 메트릭 지원
- 현재글 : [uvloop] deprecated asyncio.iscoroutinefunction을 inspect 모듈로 교체
- 다음글 [Triton] AMD fine-grained cluster barrier 추가 및 Gluon 노출
댓글