NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #159 most downloaded on PyPI
threadpoolctl
Last release 19 days ago
15 Sep 2026
Release timing varies
gaps range from 5 weeks to 1.5 years
Nearly every release is documented
notes for 13 of 13 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
13 releases · first in 2019
Fixed an intermittent OSError on Windows when DLLs are loaded or unloaded concurrently during library discovery (for example when importing conda-forg
Fixed an intermittent OSError on Windows when DLLs are loaded or unloaded
concurrently during library discovery (for example when importing conda-forge
OpenCV). On Python 3.14+, discovery uses ctypes.util.dllist when available.
If dllist raises OSError, threadpoolctl emits a RuntimeWarning instead
of crashing so the failure can be reported upstream with a minimal
reproducer. Older Pythons use a Toolhelp snapshot enumerator, with graceful
per-module fallbacks.
https://github.com/joblib/threadpoolctl/pull/219
Added the ability to check whether a limiting API affects just the current thread or the whole process. Mainly aimed at debugging and diagnostics, and somewhat unreliable, it is therefore enabled by default only for command-line usage. https://github.com/joblib/threadpoolctl/pull/213
Only warn about simultaneous libomp and libiomp usage on Linux, where the
incompatibility is known to cause crashes.
https://github.com/joblib/threadpoolctl/pull/222
Fixed a deadlock triggered by getting or setting MKL's number of threads from parallel threads when using MKL with libiomp (Intel threading) on Linux. https://github.com/joblib/threadpoolctl/pull/228
Going forward, setting the number of threads will only have a thread-local impact if feasible (for example, at minimum the underlying library must support this option, and many don't.) https://github.com/joblib/threadpoolctl/pull/228
For MKL, setting the number of threads is now thread-local, i.e. limiting the number of threads won't impact MKL's thread pool size when using MKL in other Python threads. https://github.com/joblib/threadpoolctl/pull/228
For OpenBLAS compiled with OpenMP on Linux and macOS, setting the number of threads is now thread-local, i.e. won't impact OpenBLAS thread pool size in other Python threads. On Windows behavior is likely process-wide, but this may depend on how OpenBLAS was compiled with OpenMP. https://github.com/joblib/threadpoolctl/pull/228
Fix OpenBLAS detection for conda package on Windows https://github.com/joblib/threadpoolctl/pull/240
Fixed a deadlock on Linux when using threadpoolctl from multiple threads. https://github.com/joblib/threadpoolctl/pull/243
Start using Python 3.14's built-in support for listing shared libraries.
On Linux, start using /proc/self/maps for listing shared libraries.
Avoid importing ctypes.util on Linux (and load libc with
ctypes.CDLL(None)) so threadpool_info() does not create libffi
closures that can abort after os.fork() on some libffi builds.
https://github.com/joblib/threadpoolctl/pull/242
Dropped official support for Python 3.9. https://github.com/joblib/threadpoolctl/pull/255
One column per quarter.
We're happy to announce the 3.6.0 release. The changelog is available here: https://github.com/joblib/threadpoolctl/blob/master/CHANGES.md.
We're happy to announce the 3.6.0 release. The changelog is available here: https://github.com/joblib/threadpoolctl/blob/master/CHANGES.md.
This version supports Python versions 3.9 to 3.13.
You can install with pip:
pip install -U threadpoolctl
or conda:
conda install -c conda-forge threadpoolctl
Added support for libraries with a path longer than 260 on Windows. The supported path length is now 10 times higher but not unlimited for security reasons. https://github.com/joblib/threadpoolctl/pull/189
Dropped official support for Python 3.8. https://github.com/joblib/threadpoolctl/pull/186 https://github.com/joblib/threadpoolctl/pull/191
We're happy to announce the 3.5.0 release, which adds support for the Scientific Python builds of OpenBLAS. The changelog is available here: https://g
We're happy to announce the 3.5.0 release, which adds support for the Scientific Python builds of OpenBLAS. The changelog is available here: https://github.com/joblib/threadpoolctl/blob/master/CHANGES.md.
This version supports Python versions 3.8 to 3.12.
You can install with pip:
pip install -U threadpoolctl
or conda:
conda install -c conda-forge threadpoolctl
We're happy to announce the 3.4.0 release, which adds support for Pyodide and systems with alternative implementations of libc.
We're happy to announce the 3.4.0 release, which adds support for Pyodide and systems with alternative implementations of libc.
The changelog is available here: https://github.com/joblib/threadpoolctl/blob/master/CHANGES.md.
This version supports Python versions 3.8 to 3.12.
You can install with pip:
pip install -U threadpoolctl
or conda:
conda install -c conda-forge threadpoolctl
Added support for Python interpreters statically linked against libc or linked against alternative implementations of libc like musl (on Alpine Linux for instance). https://github.com/joblib/threadpoolctl/pull/171
Added support for Pyodide https://github.com/joblib/threadpoolctl/pull/169
We're happy to announce the 3.3.0 release, which main feature is the support of FlexiBLAS.
We're happy to announce the 3.3.0 release, which main feature is the support of FlexiBLAS.
The changelog is available here: https://github.com/joblib/threadpoolctl/blob/master/CHANGES.md.
This version supports Python versions 3.8 to 3.12.
You can install with pip:
pip install -U threadpoolctl
or conda:
conda install -c conda-forge threadpoolctl
Extended FlexiBLAS support to be able to switch backend at runtime. https://github.com/joblib/threadpoolctl/pull/163
Added support for FlexiBLAS https://github.com/joblib/threadpoolctl/pull/156
Fixed a bug where an unsupported library would be detected because it shares a common prefix with one of the supported libraries. Now the symbols are also checked to identify the supported libraries. https://github.com/joblib/threadpoolctl/pull/151
Dropped support for Python 3.6 and 3.7.
Dropped support for Python 3.6 and 3.7.
Added support for custom library controllers. Custom controllers must inherit from
the threadpoolctl.LibController class and be registered to threadpoolctl using the
threadpoolctl.register function.
https://github.com/joblib/threadpoolctl/pull/138
A warning is raised on macOS when threadpoolctl finds both Intel OpenMP and LLVM OpenMP runtimes loaded simultaneously by the same Python program. See details and workarounds at https://github.com/joblib/threadpoolctl/blob/master/multiple_openmp.md. https://github.com/joblib/threadpoolctl/pull/142
Fixed a detection issue of the BLAS libraires packaged by conda-forge on Windows. https://github.com/joblib/threadpoolctl/pull/112
Fixed a detection issue of the BLAS libraires packaged by conda-forge on Windows. https://github.com/joblib/threadpoolctl/pull/112
threadpool_limits and ThreadpoolController.limit now accept the string
"sequential_blas_under_openmp" for the limits parameter. It should only be used for
the specific case when one wants to have sequential BLAS calls within an OpenMP
parallel region. It takes into account the unexpected behavior of OpenBLAS with the
OpenMP threading layer.
https://github.com/joblib/threadpoolctl/pull/114
New object threadpooctl.ThreadpoolController which holds controllers for all the supported native libraries. The states of these libraries is accessib
New object threadpooctl.ThreadpoolController which holds controllers for all the
supported native libraries. The states of these libraries is accessible through the
info method (equivalent to threadpoolctl.threadpool_info()) and their number of
threads can be limited with the limit method which can be used as a context
manager (equivalent to threadpoolctl.threadpool_limits()). This is especially useful
to avoid searching through all loaded shared libraries each time.
https://github.com/joblib/threadpoolctl/pull/95
Added support for OpenBLAS built for 64bit integers in Fortran. https://github.com/joblib/threadpoolctl/pull/101
Added the possibility to use threadpoolctl.threadpool_limits and
threadpooctl.ThreadpoolController as decorators through their wrap method.
https://github.com/joblib/threadpoolctl/pull/102
Fixed an attribute error when using old versions of OpenBLAS or BLIS that are missing version query functions. https://github.com/joblib/threadpoolctl/pull/88 https://github.com/joblib/threadpoolctl/pull/91
Fixed an attribute error when python is run with -OO. https://github.com/joblib/threadpoolctl/pull/87
threadpoolctl.threadpool_info() now reports the architecture of the CPU cores detected by OpenBLAS (via openblas_get_corename) and BLIS (via bli_arch_
threadpoolctl.threadpool_info() now reports the architecture of the CPU
cores detected by OpenBLAS (via openblas_get_corename) and BLIS (via
bli_arch_query_id and bli_arch_string).
Fixed a bug when the version of MKL was not found. The "version" field is now set to None in that case. https://github.com/joblib/threadpoolctl/pull/82
python -m threadpoolctl -i numpy
New commandline interface:
python -m threadpoolctl -i numpy
will try to import the numpy package and then return the output of
threadpoolctl.threadpool_info() on STDOUT formatted using the JSON
syntax. This makes it easier to quickly introspect a Python environment.
bump version
bump version (#62)
Expose MKL, BLIS and OpenBLAS threading layer in information displayed by
threadpool_info. This information is referenced in the threading_layer
field.
https://github.com/joblib/threadpoolctl/pull/48
https://github.com/joblib/threadpoolctl/pull/60
When threadpoolctl finds libomp (LLVM OpenMP) and libiomp (Intel OpenMP) both loaded, a warning is raised to recall that using threadpoolctl with this mix of OpenMP libraries may cause crashes or deadlocks. https://github.com/joblib/threadpoolctl/pull/49
Breaking change: method get_original_num_threads on the threadpool_limits context manager to cheaply access the initial state of the runtime:
Detect libraries referenced by symlinks (e.g. BLAS libraries from conda-forge). https://github.com/joblib/threadpoolctl/pull/34
Add support for BLIS. https://github.com/joblib/threadpoolctl/pull/23
Breaking change: method get_original_num_threads on the threadpool_limits
context manager to cheaply access the initial state of the runtime:
user_api parameter;{user_api: num_threads};threadpool_limits was set to
None.https://github.com/joblib/threadpoolctl/pull/32
Initial release.
Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →