<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/github---robertsdotpm-runloom-real-goroutines-for-python-3-13t-free-threaded--83sjt8qk7" -->

---
title: GitHub - robertsdotpm/runloom: Real Goroutines for...
description: Runloom is a Python library that brings Go-style stackful coroutines (goroutines) to Python 3.13t+ with the GIL disabled. It uses a hand-rolled assembly...
canonical: https://daily.dev/posts/github---robertsdotpm-runloom-real-goroutines-for-python-3-13t-free-threaded--83sjt8qk7
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: GitHub - robertsdotpm/runloom: Real Goroutines for Python 3.13t+ free-threaded. | daily.dev
og:description: Runloom is a Python library that brings Go-style stackful coroutines (goroutines) to Python 3.13t+ with the GIL disabled. It uses a hand-rolled assembly...
og:url: https://daily.dev/posts/github---robertsdotpm-runloom-real-goroutines-for-python-3-13t-free-threaded--83sjt8qk7
og:image: https://api.daily.dev/og/posts/83sJT8QK7.png
og:image:alt: GitHub - robertsdotpm/runloom: Real Goroutines for Python 3.13t+ free-threaded.
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# GitHub - robertsdotpm/runloom: Real Goroutines for Python 3.13t+ free-threaded.

**[Hacker News](https://daily.dev/sources/hn)** · 5 min read · 19 upvotes · 0 comments

## Summary

Runloom is a Python library that brings Go-style stackful coroutines (goroutines) to Python 3.13t+ with the GIL disabled. It uses a hand-rolled assembly context switch, a C-based M:N work-stealing scheduler, and netpoll to let developers write plain blocking code that runs concurrently across all CPU cores. Benchmarks show it matches Go's spawn rate (2.29M/s vs 2.10M/s in pure C) and achieves near-parity on throughput (596k vs 603k req/s). The main trade-off is memory: a suspended fiber uses ~3.3× more RAM than a Go goroutine due to CPython's eval frame. A monkey-patch API makes existing blocking stdlib code cooperative without rewrites, and an asyncio bridge provides a migration path from async/await code.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://github.com/robertsdotpm/runloom>

## Questions this post answers

### How does runloom's spawn performance compare to Go's goroutines on the same hardware?

Runloom's pure-C spawn rate reaches 2.29 million spawns per second versus Go's 2.10 million on the same 64-core machine, beating Go on raw spawn. Python-level spawning via runloom.fiber drops to 1.35 million per second, about 0.65x Go's rate, while context switching lands near parity at roughly 75ns per yield.

_Anyone weighing Python concurrency options against Go can compare runtime benchmarks like these on daily.dev._

### What Python version is required to get multi-core parallelism with runloom?

Multi-core parallelism requires free-threaded CPython 3.13t or later, since that build removes the GIL and lets runloom's hub threads run across real cores. On a standard GIL build, runloom still works with cheap spawn and netpoll, but execution stays single-core, behaving like asyncio rather than true parallel goroutines.

_Developers tracking free-threaded Python adoption can follow ecosystem tools like this on daily.dev._

### How much more memory does a runloom fiber use compared to a Go goroutine?

An empty parked runloom fiber uses about 8.8 KB of memory versus roughly 2.7 KB for a Go goroutine, a 3.3x gap. The overhead comes from each fiber carrying a full CPython eval frame; a C-level handler closes most of that gap in practice.

_Engineers evaluating memory trade-offs between Python and Go concurrency models can dig into specifics on daily.dev._

## Similar posts on daily.dev

- [TonIO, a Multi-threaded Async Runtime for Python](https://daily.dev/posts/tonio-a-multi-threaded-async-runtime-for-python-hbr5n819j) · Planet Python · 2 upvotes · 0 comments
- [Python 3.14 and the End of the GIL](https://daily.dev/posts/python-3-14-and-the-end-of-the-gil-uz16vleyr) · Towards Data Science · 6 upvotes · 0 comments
- [Rust concurrency vs Go concurrency: stackless vs stackfull coroutines](https://daily.dev/posts/rust-concurrency-vs-go-concurrency-stackless-vs-stackfull-coroutines-7wpfxbf6k) · Sylvain Kerkour · 7 upvotes · 0 comments
- [Internals for Interns](https://daily.dev/posts/internals-for-interns-b48rbnp0g) · Hacker News · 0 upvotes · 0 comments
- [The future of Python web services looks GIL-free](https://daily.dev/posts/the-future-of-python-web-services-looks-gil-free-fcwl1axhz) · Lobsters · 2 upvotes · 0 comments

---

Tags: [#python](https://daily.dev/tags/python), [#golang](https://daily.dev/tags/golang)

[View this post on daily.dev](https://daily.dev/posts/github---robertsdotpm-runloom-real-goroutines-for-python-3-13t-free-threaded--83sjt8qk7)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"GitHub - robertsdotpm/runloom: Real Goroutines for Python 3.13t+ free-threaded.","url":"https://daily.dev/posts/github---robertsdotpm-runloom-real-goroutines-for-python-3-13t-free-threaded--83sjt8qk7","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/github---robertsdotpm-runloom-real-goroutines-for-python-3-13t-free-threaded--83sjt8qk7"},"datePublished":"2026-07-10T16:39:24.132Z","dateModified":"2026-09-14T07:37:10.495Z","description":"Runloom is a Python library that brings Go-style stackful coroutines (goroutines) to Python 3.13t+ with the GIL disabled. It uses a hand-rolled assembly...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d96c4ed14f3dbd705b11365aa695250e?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d96c4ed14f3dbd705b11365aa695250e?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/github---robertsdotpm-runloom-real-goroutines-for-python-3-13t-free-threaded--83sjt8qk7","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":19},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"python,golang","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"GitHub - robertsdotpm/runloom: Real Goroutines for Python 3.13t+ free-threaded."}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/github---robertsdotpm-runloom-real-goroutines-for-python-3-13t-free-threaded--83sjt8qk7#faq","mainEntity":[{"@type":"Question","name":"How does runloom's spawn performance compare to Go's goroutines on the same hardware?","acceptedAnswer":{"@type":"Answer","text":"Runloom's pure-C spawn rate reaches 2.29 million spawns per second versus Go's 2.10 million on the same 64-core machine, beating Go on raw spawn. Python-level spawning via runloom.fiber drops to 1.35 million per second, about 0.65x Go's rate, while context switching lands near parity at roughly 75ns per yield. Anyone weighing Python concurrency options against Go can compare runtime benchmarks like these on daily.dev."}},{"@type":"Question","name":"What Python version is required to get multi-core parallelism with runloom?","acceptedAnswer":{"@type":"Answer","text":"Multi-core parallelism requires free-threaded CPython 3.13t or later, since that build removes the GIL and lets runloom's hub threads run across real cores. On a standard GIL build, runloom still works with cheap spawn and netpoll, but execution stays single-core, behaving like asyncio rather than true parallel goroutines. Developers tracking free-threaded Python adoption can follow ecosystem tools like this on daily.dev."}},{"@type":"Question","name":"How much more memory does a runloom fiber use compared to a Go goroutine?","acceptedAnswer":{"@type":"Answer","text":"An empty parked runloom fiber uses about 8.8 KB of memory versus roughly 2.7 KB for a Go goroutine, a 3.3x gap. The overhead comes from each fiber carrying a full CPython eval frame; a C-level handler closes most of that gap in practice. Engineers evaluating memory trade-offs between Python and Go concurrency models can dig into specifics on daily.dev."}}]}
```

