Cython использует OpenMP для его многопоточных возможностей.
Чтобы включить OpenMP, компилятору понадобится дополнительный флаг, который будет передан ему при компиляции и компоновке, иначе параллельная часть вашего кода будет проигнорирована.
Флаги для некоторых популярных компиляторов являются:
- НКУ = -fopenmp
- MSVC =/OpenMP
- ИКК = -openmp
Предполагая, что вы сохранили функция в файле test.pyx
: setup.py
должен работать, если вы используете GCC.
from distutils.core import setup, Extension
from Cython.Build import cythonize
extensions = [Extension(
"test",
sources=["test.pyx"],
extra_compile_args=["-fopenmp"],
extra_link_args=["-fopenmp"]
)]
setup(
ext_modules = cythonize(extensions)
)
После компиляции, как, что код должен порождать 10 потоков при запуске:
In [1]: import test
In [2]: test.test_func()
Thread ID: 9
Thread ID: 1
Thread ID: 6
Thread ID: 7
Thread ID: 3
Thread ID: 8
Thread ID: 5
Thread ID: 4
Thread ID: 0
Thread ID: 2
Если вы хотите еще немного информации, чем this страницы в Cython документации имеет хорошее базовое руководство о том, как использовать параллелизм с цитоном.