---
title: "rsloop: Rust로 만든 Python asyncio 이벤트 루프 (io_uring 지원)"
published: 2026-03-21T22:12:59.000Z
canonical: https://jeff.news/article/848
---
# rsloop: Rust로 만든 Python asyncio 이벤트 루프 (io_uring 지원)

PyO3 기반으로 Python asyncio 이벤트 루프를 Rust로 재구현한 rsloop. Linux에서 compio + io_uring을 사용하고, asyncio 호환 표면이 넓어 drop-in 교체가 가능하다. uvloop과는 다른 접근으로 이벤트 루프 성능을 노리는 프로젝트.

- Python asyncio의 이벤트 루프를 Rust로 구현한 `rsloop`이 나왔음. PyO3 기반이고, pip install로 바로 쓸 수 있음. uvloop의 대항마 포지션인데, 접근 방식이 다름

## 아키텍처

- 각 `rsloop.Loop`은 전용 Rust 런타임 스레드를 하나 소유함. 이 스레드가 루프 조율과 I/O를 담당하고, Python 콜백/태스크/코루틴은 `run_forever()`나 `run_until_complete()`을 호출한 스레드(보통 메인 Python 스레드)에서 실행됨

- Linux에서는 `compio` + `io_uring`을 사용해서 fd watcher, TCP/Unix 소켓 readiness, 소켓 읽기, non-TLS 서버 accept을 런타임 스레드에서 처리함. 다만 TLS I/O, TLS accept, 레거시 transport write는 아직 헬퍼 스레드를 사용하는 하이브리드 모델임

- 플랫폼 지원은 Linux, macOS, Windows 모두 커버. Windows 파이프 transport와 subprocess 워크플로우도 됨

## 기능 범위

- asyncio 호환 표면이 꽤 넓음:
  - 루프 라이프사이클: `run_forever`, `run_until_complete`, `stop`, `close`
  - 스케줄링: `call_soon`, `call_later`, `call_at` + Handle/TimerHandle
  - Future/Task: `create_future`, `create_task`, `run_in_executor`
  - I/O: `add_reader`/`add_writer`, `sock_recv`/`sock_sendall`, `create_server`/`create_connection`
  - Unix 소켓, 파이프, subprocess, 시그널 핸들러까지 지원
  - `contextvars.Context` 캡처 하에 콜백 실행
  - Python 3.12+ `asyncio.run(loop_factory=...)` 통합

- import하면 자동으로 `asyncio.open_connection()`과 `asyncio.start_server()`를 몽키패치함. `RSLOOP_USE_FAST_STREAMS` 환경변수로 끌 수 있고, SSL이 설정되면 자동으로 stdlib으로 폴백됨

## 벤치마크와 한계

- CPython 3.14.0 Linux 기준 벤치마크 스크립트가 포함되어 있고, uvloop과의 콜백/태스크/TCP 스트림 비교가 가능함. FastAPI 데모도 있어서 stdlib asyncio, uvloop, rsloop 세 가지로 같은 앱을 돌려볼 수 있음

- 현재 한계도 명확함:
  - TLS는 rustls 백엔드 사용, 암호화된 프라이빗 키 미지원
  - `preexec_fn` 미지원 (fork/exec 사이에 Python 실행이 unsafe)
  - 싱글 런타임 스레드 I/O 모델로 전환 중이지만 아직 완성 안 됨

> [!TIP]
> Python 3.8~3.14(+free-threaded 3.14t)까지 휠을 빌드할 수 있고, Tracy 프로파일러 통합도 지원함. `--features profiler`로 빌드하면 됨

- asyncio 이벤트 루프를 Rust로 재구현하는 접근은 uvloop(libuv 기반 Cython)과 다른 길을 가는 거임. io_uring + compio 조합으로 Linux에서의 I/O 성능을 노리는 방향이 흥미로움. 아직 하이브리드 모델이라 완성도는 더 지켜봐야 하지만, 방향성 자체는 주목할 만함

## 핵심 포인트

- 전용 Rust 런타임 스레드 + Python 콜백은 메인 스레드에서 실행하는 하이브리드 모델
- Linux에서 compio + io_uring으로 I/O 처리
- Python 3.8~3.14(+free-threaded 3.14t) 지원, Linux/macOS/Windows 크로스플랫폼
- TLS는 rustls 백엔드, 아직 헬퍼 스레드 의존 — 싱글 스레드 I/O 모델 전환 중

## 인사이트

uvloop(libuv+Cython)과 다른 접근으로 io_uring + Rust 조합을 선택한 게 흥미로움. 아직 하이브리드 모델이라 완성도는 지켜봐야 하지만 방향성이 주목할 만함.
