How do you stop numpy from multithreading? [duplicate]
Solution 1:
Only hopefully this fixes all scenarios and system you may be on.
- Use
numpy.__config__.show()
to see if you are using OpenBLAS or MKL
From this point on there are a few ways you can do this.
2.1. The terminal route export OPENBLAS_NUM_THREADS=1
or export MKL_NUM_THREADS=1
2.2 (This is my preferred way) In your python script import os
and add the line os.environ['OPENBLAS_NUM_THREADS'] = '1'
or os.environ['MKL_NUM_THREADS'] = '1'
.
NOTE when setting os.environ[VAR]
the number of threads must be a string! Also, you may need to set this environment variable before importing numpy/scipy.
There are probably other options besides openBLAS or MKL but step 1 will help you figure that out.
Solution 2:
Set the MKL_NUM_THREADS
environment variable to 1. As you might have guessed, this environment variable controls the behavior of the Math Kernel Library which is included as part of Enthought's numpy
build.
I just do this in my startup file, .bash_profile, with export MKL_NUM_THREADS=1
. You should also be able to do it from inside your script to have it be process specific.
Solution 3:
In case you want to set the number of threads dynamically, and not globally via an environment variable, you can also do:
import mkl
mkl.set_num_threads(2)
Solution 4:
In more recent versions of numpy I have found it necessary to also set NUMEXPR_NUM_THREADS=1
.
In my hands, this is sufficient without setting MKL_NUM_THREADS=1
, but under some circumstances you may need to set both.