ShopperCove
Menu
All writingBlogTopicsCategoriesAboutRSS
Blog
Categories
Observability & SRE62All categories
Topics
sre111localhost lab102performance70python58javascript47bundle size36benchmarking35node.js35web development21typescript19benchmark16content creation15All topics
About
Loading article…

ShopperCove

Hands-on notes on developer tools, written after the tool has actually been run.

All writingBlogCategoriesTopicsAboutPrivacyRSS

© 2026 ShopperCove

On this page

  1. The three phases of free-threaded Python
  2. What changed in 3.14
  3. The cost: speed and memory
  4. How to check whether the GIL is off
  5. Why the GIL can come back on
  6. Should you switch?
  7. FAQ
  8. Has Python removed the GIL?
  9. Is free-threaded Python slower?
  10. Will free-threading become the default?
  11. Sources
  1. Blog

Is Python 3.14 Free-Threaded by Default? GIL Explained

PEP 779 promoted the no-GIL build from experimental to officially supported in 3.14. It is still opt-in, and making it the default is a later phase.

Aditya Challa·11 October 2026·3 min read

Summary

Disclosure

This post contains affiliate links. If you buy through them, I may earn a commission at no extra cost to you. I only make firsthand claims about products I have actually used.

On this page
  1. The three phases of free-threaded Python
  2. What changed in 3.14
  3. The cost: speed and memory
  4. How to check whether the GIL is off
  5. Why the GIL can come back on
  6. Should you switch?
  7. FAQ
  8. Has Python removed the GIL?
  9. Is free-threaded Python slower?
  10. Will free-threading become the default?
  11. Sources

No. Python 3.14 makes the free-threaded (no-GIL) build officially supported, but it is still a separate, optional build, and standard CPython keeps the global interpreter lock.

The three phases of free-threaded Python

PEP 779 sets out the plan. Phase I began during Python 3.13 development and made the free-threaded build available but explicitly experimental. Phase II makes it officially supported but still optional. Python 3.14's What's New lists this as "PEP 779: Free-threaded Python is officially supported." Phase III would make free-threading the default build. Each step needs its own decision once the costs and benefits are clearer.

What changed in 3.14

According to What's New, the PEP 703 implementation is finished in 3.14, including the C API changes, and free-threaded mode is "significantly improved" compared with 3.13. The Steering Council accepted PEP 779 with a list of requirements to address during phase II.

The cost: speed and memory

  • The free-threading HOWTO says single-threaded code has an average overhead of about 1% on macOS aarch64 and up to 8% on x86-64 Linux, measured with the pyperformance suite.
  • For phase II, PEP 779 set hard targets of no more than 15% slower and 20% more memory (geometric mean, pyperformance) than the default build.
  • The payoff comes from CPU-bound work split across threads, which can now run truly in parallel.

How to check whether the GIL is off

  • python -VV and sys.version include "free-threading build" on a free-threaded interpreter.
  • sys._is_gil_enabled() tells you whether the GIL is actually disabled in the running process.
  • sysconfig.get_config_var("Py_GIL_DISABLED") tells you whether the build supports free-threading.

Why the GIL can come back on

A free-threaded build can run with the GIL enabled through the PYTHON_GIL environment variable or -X gil. It also turns the GIL back on automatically, with a warning, when you import a C extension that isn't marked as free-threading safe. One unported dependency can therefore cancel the benefit. The HOWTO also warns that sharing one iterator between threads isn't thread-safe.

Should you switch?

Try it in CI for CPU-bound, thread-heavy workloads whose dependencies publish free-threaded wheels. For I/O-bound services, asyncio or the default build is usually enough. See our asyncio gather vs TaskGroup lab and process vs thread pool comparison.

FAQ

Has Python removed the GIL?

Not from the default build. The GIL-free build is officially supported in 3.14 but optional.

Is free-threaded Python slower?

For single-threaded code, slightly: about 1% to 8% on average, depending on platform, according to the official HOWTO.

Will free-threading become the default?

That is PEP 779's phase III. No version has been set for it yet.

Sources

  • 01docs.python.org/3/whatsnew/3.14.html
  • 02peps.python.org/pep-0779/
  • 03docs.python.org/3/howto/free-threading-python.html
python 3.14free-threadedgilpep 703pep 779multithreadingcpython

Lab evidence

What I found running this

Read Python 3.14's What's New, PEP 779 and the official free-threading HOWTO on 10 Oct 2026, and rechecked that all three pages load on 11 Oct 2026. The overhead and memory figures are quoted from those documents, not our own benchmarks. We did not install or benchmark a free-threaded build for this post, and the GIL-check commands are documented calls, not output we captured.

Explore the product

Untested by us. Check what's included, the license and refund terms before you buy.

Ready Client Sites for prebuilt websites

See Ready Client Sites details

Notes when a lab post goes up

Occasional email for new hands-on reviews. No sequence and no sponsors.

Explore the product

Untested by us. Check what's included, the license and refund terms before you buy.

Ready Client Sites for prebuilt websites

See Ready Client Sites details

Keep reading

  • Are Python Dictionaries Ordered? Yes, Since 3.7

    Insertion order is a language guarantee, not an implementation accident.

    Summary12 Oct 20261 min read

  • When Does Python 3.10 Reach End of Life? (It Just Did)

    Five years after 3.10.0 shipped, CPython 3.10 stopped getting security fixes. If 3.10 is still running in production, here is what changes and where to move next.

    Summary10 Oct 20263 min read

  • functools.reduce vs for-loop: Localhost Lab

    Summary1 Oct 20264 min read