Skip to main content

numthreads

Set the number of threads used by OpenBLAS, MKL, OMP, NumExpr, and Accelerate

PyPI Build Status CodeCov GitHub Repo stars Documentation

numthreads is a really tiny and simple Python package designed to set the number of threads for various computing libraries including OpenBLAS, Intel's Math Kernel Library (MKL), OpenMP, NumExpr, Accelerate, and Numba. The number of threads can be set via the command line or in Python code. The performance of many numerical algorithms varies significantly based on the number of threads employed. While increasing the number of threads can often accelerate these algorithms, it's not always the case. In some instances, using more threads may actually impede computational efficiency. Therefore, it's important to be able to easily set the number of threads used by these libraries.

  • Simple and straightforward command-line interface.
  • Sets thread count for OpenBLAS, MKL, OpenMP, NumExpr, and Accelerate.
  • Context manager support for temporary thread setting in Python code.
  • Cross-platform compatibility (Linux, macOS, Windows).
  • Use as pytest plugin
  • Tiny (≤7KB) and no dependencies.

📚 Table of Contents

📦 Installation

To install numthreads, run the following command:

pip install numthreads

🚀 Quick Start

Get started with numthreads in a few seconds.

Using as a Python Module

You can also use numthreads as a Python module:

from numthreads import set_num_threads

set_num_threads(4)

This will set the number of threads using the following environment variables:

  • OpenBLAS (via OPENBLAS_NUM_THREADS)
  • MKL (via MKL_NUM_THREADS)
  • OpenMP (via OMP_NUM_THREADS)
  • NumExpr (via NUMEXPR_NUM_THREADS)
  • Accelerate (via VECLIB_MAXIMUM_THREADS)
  • Numba (via NUMBA_NUM_THREADS)

or use it as a context manager:

from numthreads import num_threads

with num_threads(4):
    # Your code here will run with the specified number of threads
    pass

To set OMP (OpenMP) threads at any time (OpenMP docs), you can use omp_set_num_threads or the omp_num_threads context manager:

from numthreads import omp_set_num_threads

omp_set_num_threads(4)

or

from numthreads import omp_num_threads

with omp_num_threads(4):
    # Your code here will run with the specified number of threads
    pass

Command Line Interface

After installing numthreads, you can easily set the number of threads used by supported libraries via the command line. For example, to print the command to set the number of threads to 4, run:

numthreads 4

Which will print the following:

export OPENBLAS_NUM_THREADS='4' ; export MKL_NUM_THREADS='4' ; export OMP_NUM_THREADS='4' ; export NUMEXPR_NUM_THREADS='4' ; export VECLIB_MAXIMUM_THREADS='4' ; export NUMBA_NUM_THREADS='4'

Unix-like Systems (Linux, macOS, WSL)

To apply the settings in your shell:

eval $(numthreads <number_of_threads>)

Windows (PowerShell)

In PowerShell, use:

Invoke-Expression $(numthreads <number_of_threads>)

Get the number of threads

To get the number of threads currently set, run:

eval $(numthreads 12)  # first set something
numthreads get

Which will print the following:

OPENBLAS_NUM_THREADS: 12
MKL_NUM_THREADS: 12
OMP_NUM_THREADS: 12
NUMEXPR_NUM_THREADS: 12
VECLIB_MAXIMUM_THREADS: 12
NUMBA_NUM_THREADS: 12

Check the numthreads -h message for more information:

usage: numthreads [-h] n

Set the number of threads for OpenBLAS, MKL, OMP, NumExpr, and Accelerate.
Usage: Run `numthreads <number>` to print the export commands. On Unix-like
systems (Linux, macOS, WSL), use `eval $(numthreads <number>)` in your shell
to apply these settings. On Windows, in PowerShell, use `Invoke-Expression
$(numthreads <number>)`.

positional arguments:
  n           Number of threads to set or use 'get' to display current
              settings.

options:
  -h, --help  show this help message and exit

🔌 Using as a pytest Plugin

numthreads can be used as a pytest plugin to automatically set the number of threads for your tests.

To use it, make sure numthreads is installed. Then, run pytest with the --numthreads option followed by the desired number of threads:

pytest --numthreads 1

This will set the number of threads for OpenBLAS, MKL, OMP, NumExpr, and Accelerate before running your tests.

❓ Getting Help

For more information, or to report issues, please visit numthreads GitHub repository.

Metadata

Release files for numthreads 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for numthreads 0.6.1
File Size Uploaded
numthreads-0.6.1.tar.gz 8.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for numthreads 0.6.1
File Interpreter ABI Platform
numthreads-0.6.1-py3-none-any.whl Python 3 none any Details

Total release size: 15.8 kB

Release files / numthreads-0.6.1.tar.gz

Download URL numthreads-0.6.1.tar.gz
Size 8.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d20581d29439ea1bb1469f824744627f9664ea62d390317e27c4d6d5e55d5548
BLAKE2b-256 checksum
How to use checksums
89e5f1406b14325ad2c2fd169ca6a9b46fd01a3824f378e305ba00905da3a767
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / numthreads-0.6.1-py3-none-any.whl

Download URL numthreads-0.6.1-py3-none-any.whl
Size 7.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
76218b10b60b63c3d8c4dd65f89effba4c5235753d8858fd09a32d6690f8a958
BLAKE2b-256 checksum
How to use checksums
b8a7c4e8cc38715b8cc82cd4d57e7ec0901818ecff0260d6d430c98bf7a4062e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release history Release notifications | RSS feed

This release

0.6.1 This release

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page