Python 3.14 Free-Threaded (No-GIL) and Frappe: has anyone tried this?

Hi everyone,

I’ve been looking into the Python 3.14 free-threaded mode (PEP 703 / No-GIL) and I’m wondering how realistic this is in the context of Frappe

Today, for real parallelism in services or background jobs, the usual approach is to rely on ProcessPoolExecutor, since threads don’t scale due to the GIL. With free-threaded Python, in theory, we could get true parallelism with threads, potentially reducing process overhead and simplifying some architectures

I have a few questions:

  • Has anyone actually tested Frappe running on Python 3.14 in free-threaded mode? (is it even possible?)

  • Are there known blockers in Frappe (request/context handling, ORM, DB connections, global state) that would make this unsafe or impractical?

  • Has the core team shared any position or plans regarding support for free-threaded Python?

  • For services that currently rely on ProcessPoolExecutor, could ThreadPoolExecutor become a viable alternative in the future, or is the current process-based model still the recommended approach?

  • Are there any open issues, discussions, or roadmap items related to this?

My use case is mainly services/background jobs that do parallel processing and still need to interact with the Frappe ORM and the database.

Thanks!

I checked nogil version long ago, a lot of libraries didn’t have compatible versions. Also, single-threaded performance is worse than the GIL version, so nogil has its cons too. Hopefully, one day it will be usable.

2 Likes