/https://cdn.pythonbytes.fm/static/img/podcast-theme-img_3000.jpg)
Python Bytes
Michael Kennedy and Calvin Hendryx-Parker
#497 Faster than light profiling
SEP 23, 202626 MIN
/https://cdn.pythonbytes.fm/static/img/podcast-theme-img_3000.jpg)
Description
Topics covered in this episode:
Tachyon: A sampling profiler ships in Python 3.15's stdlib
Python Workers are now generally available on Cloudflare
Flet 1.0 - build cross-platform apps in Python
marimo-book: Build static books from marimo notebooks
Extras
Joke
Watch on YouTube
Sponsored by Logfire from Pydantic: pythonbytes.fm/logfire
Connect with the hosts
Michael: Mastodon / BlueSky / X / LinkedIn
Calvin: Mastodon / BlueSky / X / LinkedIn
Show: Mastodon / BlueSky / X
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am PT. Older video versions available there too.
Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.
Michael #1: Tachyon: A sampling profiler ships in Python 3.15's stdlib
Python 3.15 adds the profiling package per PEP 799: profiling.tracing (where cProfile moved) and profiling.sampling, the new sampler called Tachyon
py-spy and Austin exist but copy raw interpreter bytes with no API, so every CPython release risks breaking them; one in the stdlib is a contract to stop breaking profilers
Defaults: 1 kHz, main thread, wall clock, and a -live top-like view for poking at a slow server
Output is flexible: pstats, -flamegraph, -diff-flamegraph against a baseline, -heatmap on source lines, -opcodes for specialized bytecode, -gecko for Firefox Profiler with GIL and GC markers
Profiling modes: wall, cpu, gil (which function is starving my other threads?), and exception, plus -async-aware to see the task graph instead of just select(), -all-threads, and -subprocesses forking a profiler per child
Near-zero overhead for production; guidance is 10-30 second windows on representative load, and free-threaded builds divide the rate by thread count
Attach to a running PID, same minor version only; ptrace permissions are the main friction. A 3.14 backport already exists on GitHub
Caveat: it only sees Python frames, so 90% in calculate() hides NumPy underneath. For native stacks there's Cronon from HRT, 200k samples/sec over DWARF, not yet open source
Calvin #2: Python Workers are now generally available on Cloudflare
Python Workers are out of beta - now GA, "first-class" language on Cloudflare's Developer Platform
No more manual JS interop: bindings (queues, R2, D1, Durable Objects) now work natively in Python, e.g. self.env.QUEUE.send({...})
Runs on Pyodide (WASM-compiled Python), with real TCP socket support for DB connectivity
Frameworks supported: FastAPI, Django, Flask; AI libs like OpenAI SDK, LangChain, MCP
Underlying platform work formalized as PEP 783 (PyEmscripten), after a year of discussion
Bottom line: write real Python on Cloudflare's edge, no JS glue code required
Calvin #3: Flet 1.0 - build cross-platform apps in Python
Flet hits 1.0 - build Flutter-backed apps from pure Python, no frontend experience needed
One codebase targets six platforms: iOS, Android, Windows, macOS, Linux, web
150+ built-in UI controls, plus support for custom controls / wrapping Flutter packages
Mobile now supports real Python packages: NumPy, pandas, Pillow, cryptography
Comes with pytest-based UI testing and an MCP integration for AI coding assistants
Milestone lands 4+ years after its first PyPI release (Sept 2022) - signals "production ready," not experimental
Michael #4: marimo-book: Build static books from marimo notebooks
marimo-book is a Jupyter-Book-style static site generator built specifically for marimo .py notebooks. It ships polished multi-page sites with Material for MkDocs theming, full-text search, dark mode, and code copy, plus a content-hashed incremental build cache that drops rebuilds from 100+ seconds to roughly 3 seconds on real books. Standout extras include anywidget rendering without a kernel, static reactivity for discrete sliders via pre-rendered lookup tables, an opt-in WASM/Pyodide mode per chapter, and per-chapter launch buttons.
If you've wanted to publish a marimo notebook as a real book or course site without hosting a kernel, marimo-book gives you the static, searchable, fast-loading output you'd expect from Jupyter Book.
Alpha (0.1.x), but in production: pin marimo-book>=0.1.5,<0.2; the book.yml schema is stable for v0.1, and dartbrains.org is a real-world user.
Two-stage build by design: a marimo-aware preprocessor emits plain Markdown + inline HTML, then mkdocs (Material today, zensical tomorrow) renders it. Not a mkdocs plugin, so the shell stays swappable.
Interactive widgets without a kernel: anywidget Canvas/Three.js/Plotly mounts render statically, and mo.ui.slider with explicit steps gets pre-computed as a static lookup table.
WASM escape hatch per chapter: set mode: wasm and the chapter routes through marimo's MarimoIslandGenerator, shipping the marimo runtime + Pyodide bundle for full reactivity where you need it.
Per-chapter launch buttons and extras: readers can jump to molab, GitHub, or a downloaded .py; optional [social], [linkcheck], and [pdf] extras cover OG cards, htmlproofer, and WeasyPrint PDF export.
Sandboxed notebooks: the sandbox mode reads PEP 723 inline metadata and provisions per-notebook envs via uv for portable builds, at the cost of slower first runs.
Extras
Calvin:
Great overview of a new feature in Python 3.15 - frozendict
Michael:
Microsoft Plugs Nearly 1,000 Security Holes in Windows
I’ll be speaking at PyBay 2026
PyCon NL on October 15 in Utrecht
Heading to Europe in October? PyCon NL is October 15th in Utrecht. One day, three tracks, about 350 people. It's an hour by train from Schiphol. There's also a session just for community organizers from groups like PyLadies, PyData, and Django. And the location fits. The Netherlands is where Python itself was born.
Joke: You have homework (no really ;) )
Watch Interview with Big Data engineer in 2026 by Kai Lentit

