threadpoolctl
Project description
Thread-pool Controls

Python helpers to limit the number of threads used in the threadpool-backed of common native libraries used for scientific computing and data science (e.g. BLAS and OpenMP).
Fine control of the underlying thread-pool size can be useful in workloads that involve nested parallelism so as to mitigate oversubscription issues.
Installation
-
For users, install the last published version from PyPI:
pip install threadpoolctl
-
For contributors, install from the source repository in developer mode:
pip install -r dev-requirements.txt flit install --symlink
then you run the tests with pytest:
pytest
Usage
Runtime Introspection
Introspect the current state of the threadpool-enabled runtime libraries that are loaded when importing Python packages:
>>> from threadpoolctl import threadpool_info
>>> from pprint import pprint
>>> pprint(threadpool_info())
[]
>>> import numpy
>>> pprint(threadpool_info())
[{'filepath': '/opt/venvs/py37/lib/python3.7/site-packages/numpy/.libs/libopenblasp-r0-382c8f3a.3.5.dev.so',
'internal_api': 'openblas',
'num_threads': 4,
'prefix': 'libopenblas',
'user_api': 'blas',
'version': '0.3.5.dev'}]
>>> import xgboost
>>> pprint(threadpool_info())
[{'filepath': '/opt/venvs/py37/lib/python3.7/site-packages/numpy/.libs/libopenblasp-r0-382c8f3a.3.5.dev.so',
'internal_api': 'openblas',
'num_threads': 4,
'prefix': 'libopenblas',
'user_api': 'blas',
'version': '0.3.5.dev'},
{'filepath': '/opt/venvs/py37/lib/python3.7/site-packages/scipy/.libs/libopenblasp-r0-8dca6697.3.0.dev.so',
'internal_api': 'openblas',
'num_threads': 4,
'prefix': 'libopenblas',
'user_api': 'blas',
'version': None},
{'filepath': '/usr/lib/x86_64-linux-gnu/libgomp.so.1',
'internal_api': 'openmp',
'num_threads': 4,
'prefix': 'libgomp',
'user_api': 'openmp',
'version': None}]
Set the maximum size of thread-pools
Control the number of threads used by the underlying runtime libraries in specific sections of your Python program:
from threadpoolctl import threadpool_limits
import numpy as np
with threadpool_limits(limits=1, user_api='blas'):
# In this block, calls to blas implementation (like openblas or MKL)
# will be limited to use only one thread. They can thus be used jointly
# with thread-parallelism.
a = np.random.randn(1000, 1000)
a_squared = a @ a
Known limitation
threadpool_limits
does not act as expected in nested parallel loops
managed by distinct OpenMP runtime implementations (for instance libgomp
from GCC and libomp from clang/llvm or libiomp from ICC).
See the test_openmp_nesting()
function in tests/test_threadpoolctl.py
for an example.
Maintainers
To make a release:
Bump the version number (__version__
) in threadpoolctl.py
.
Build the distribution archives:
pip install flit
flit build
Check the contents of dist/
.
If everything is fine, make a commit for the release, tag it, push the tag to github and then:
flit publish
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file threadpoolctl-1.1.0.tar.gz
.
File metadata
- Download URL: threadpoolctl-1.1.0.tar.gz
- Upload date:
- Size: 19.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.14.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
86f330c5ead7fd2d2143e76c4a4cc032d5a2f9cd4c4857fa06847cae2211ab82
|
|
MD5 |
2744693260320318c7fe7d90f98266bf
|
|
BLAKE2b-256 |
d3e320510e8a060fe36545752a54375d85f77232f7094a7d85824c24cffe7e0a
|
File details
Details for the file threadpoolctl-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: threadpoolctl-1.1.0-py3-none-any.whl
- Upload date:
- Size: 26.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.14.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
fd69f43f4d6e8d861b4e1715a9c909cb01973220b21493b6bb261a1d1172d3d8
|
|
MD5 |
290b79daaeb1832d73263450eb2479a1
|
|
BLAKE2b-256 |
bd0988c9d47193bffd0925e4495f8074e424d7d93de5dbd97d893bc429175af7
|