← 블로그 목록

Stackless Python은 파이썬에 경량 태스크릿과 채널을 더한 구현이다

Stackless Python은 코루틴이 들어간 파이썬이라는 짧은 설명만으로는 부족하다. 태스크릿, 채널, 스케줄러를 통해 매우 가벼운 실행 단위를 다루는 별도 구현이며, PEP 342와 PEP 492가 정착시킨 오늘날의 `async`/`await`와는 다른 계보로 동시성을 메시지 전달과 작은 실행 주체의 협력으로 보게 만드는 관점을 보여 준다는 점을 정리한다.

Stackless Python은 파이썬에 경량 태스크릿과 채널을 더한 구현이다

Stackless Python은 파이썬에 경량 태스크릿과 채널을 더한 구현이다

Stackless Python은 파이썬 문법을 완전히 새로 만든 언어가 아니라, 파이썬 계열 구현 위에 태스크릿(tasklet)채널(channel) 같은 경량 동시성 도구를 더한 프로젝트다. 공식 문서도 Stackless의 핵심 구성으로 태스크릿, 채널, 스케줄러를 따로 설명한다.

예전에는 이 프로젝트를 소개하면서 코루틴이 들어간 파이썬이라고 짧게 말하곤 했는데, 그 설명만으로는 조금 부족하다. 오늘 기준의 파이썬에는 이미 async/await도 있고, 제너레이터 기반 코루틴 역사도 길기 때문이다. 그래서 Stackless Python을 이해하려면 먼저 코루틴이 무엇인지부터 짚는 편이 낫다.

코루틴은 실행을 한 번에 끝내지 않고, 중간에 넘겼다가 다시 이어 가는 흐름이다

코루틴은 한쪽이 완전히 호출하고 끝내는 서브루틴과 달리, 실행 흐름을 주고받을 수 있는 구조를 가리킨다. Python의 PEP 342도 제너레이터에 값을 보내고 예외를 주입할 수 있게 하면 코루틴 스케줄러를 만들 수 있다고 설명한다.

즉 코루틴의 핵심은 “함수처럼 한 번 들어갔다가 한 번 나오고 끝나는가”보다, 중간 상태를 보존한 채 다시 이어서 실행할 수 있는가에 있다.

Stackless Python은 이 흐름을 태스크릿과 채널 중심으로 풀어낸다

Stackless 문서를 보면 가장 먼저 나오는 개념이 태스크릿이다. 문서가 직접 lightweight threads라고 부르듯, 태스크릿은 운영체제 스레드보다 훨씬 가볍게 다룰 수 있는 실행 단위다. 그리고 채널은 이 태스크릿들 사이에서 값을 주고받는 통로 역할을 한다.

이 구조를 단순하게 보면 이렇게 이해할 수 있다.

Stackless 문서는 여기에 cooperative schedulingpre-emptive scheduling 항목도 따로 두고 있다. 즉 Stackless Python은 단순히 코루틴 문법만 흉내 내는 것이 아니라, 태스크릿을 실제로 돌리는 스케줄링 모델까지 함께 제공하는 쪽에 가깝다.

오늘 기준으로는 async 파이썬과 무엇이 다른지도 같이 봐야 한다

현대 파이썬에서는 비동기 프로그래밍을 말할 때 보통 async/await를 먼저 떠올린다. 이 흐름은 PEP 342의 제너레이터 기반 코루틴, 그 뒤의 발전을 거쳐 PEP 492의 async/await 문법으로 정착했다.

그래서 지금 Stackless Python을 볼 때는 “파이썬에 코루틴을 처음 넣은 유일한 길”이라고 보기보다, 파이썬 동시성의 다른 계보로 보는 편이 더 정확하다.

둘 다 실행 흐름을 잘게 나누고 넘겨 준다는 점에서는 닿아 있지만, 생태계와 사용 문맥은 같지 않다.

그럼에도 Stackless Python이 흥미로운 이유는 실행 단위를 다루는 감각을 보여 주기 때문이다

Stackless Python이 지금 모든 파이썬 개발자의 기본 선택지는 아니더라도, 여전히 흥미로운 이유는 분명하다. 태스크릿과 채널이라는 모델은 동시성 문제를 어떻게 더 작은 실행 단위와 메시지 전달로 바라볼 수 있는가를 잘 보여 준다.

특히 많은 작업을 가볍게 쪼개고, 각 작업 사이 통신 구조를 분명히 만들고 싶을 때 Stackless의 사고방식은 지금 읽어도 배울 점이 있다. 비동기 프로그래밍을 함수 호출의 연장선이 아니라, 작은 실행 주체들의 협력으로 보는 관점을 주기 때문이다.

핵심 정리

Stackless Python은 일반 파이썬에 코루틴 비슷한 기능만 살짝 얹은 프로젝트가 아니다. 태스크릿, 채널, 스케줄러를 통해 매우 가벼운 실행 단위를 다루게 만드는 별도 구현이다.

오늘날 파이썬에서는 async/await가 더 표준적인 비동기 도구가 되었지만, Stackless Python은 동시성을 태스크릿과 메시지 전달 중심으로 설계하는 또 다른 길을 보여 준다. 그래서 이 프로젝트의 가치는 “지금도 주류인가”보다, 파이썬에서 실행 흐름을 어떻게 다르게 조직할 수 있었는가를 보여 주는 데 있다.

참고 자료

← 목록으로
Related

함께 읽으면 좋은 글

Unity코루틴게임 AI
게임 속 NPC가 동시에 살아 움직여 보이는 이유, Unity 코루틴을 다시 정리해보자

코루틴은 멀티스레드의 대체물이 아니라, 메인 스레드 안에서 시간을 나눠 쓰게 해주는 구조다. Unity 공식 문서를 바탕으로 코루틴이 무엇을 해결하고 무엇을 해결하지 못하는지 다시 정리한다.

프로그래밍애자일익스트림 프로그래밍
익스트림 프로그래밍은 과격한 방법이 아니라 변화를 버티기 위한 공학 습관이다

익스트림 프로그래밍은 이름과 달리 사람을 몰아붙이는 문화가 아니라, 테스트·리팩터링·작은 릴리스·지속 가능한 속도를 엮어 변화 비용을 낮추려는 공학 습관의 묶음이다. ‘Extreme’의 의미도 중요한 실천을 끝까지 밀어 보자는 태도에 가깝다. XP는 빨리 만드는 법이 아니라 바뀌어도 계속 만들 수 있는 법을 묻는다는 점을 정리한다.

프로그래밍데이터 구조상태 전이
모든 프로그램을 데이터와 상태 전이로 보면 설계가 더 선명해진다

‘모든 프로그램은 데이터베이스다’는 엄밀한 정의는 아니지만 사고 실험으로는 꽤 쓸모 있다. 저장·조회·갱신·삭제, 무결성, 상태 전이의 관점으로 코드를 보면 객체 이름보다 접근 패턴과 유효 상태가 먼저 보이고, 프레임워크가 바뀌어도 설계가 덜 흔들린다. 데이터를 어떻게 다루는지가 결국 프로그램의 성격을 결정한다는 점을 정리한다.