+-

我想并行执行cython文件编译.
所以,我看一下Cython.Build源文件,找到cythonize函数的以下签名:
def cythonize(module_list, exclude=None, nthreads=0, aliases=None,
quiet=False, force=False, language=None,
exclude_failures=False, **options):
以下关于cythonize nthreads选项的评论:
"For parallel compilation, set the 'nthreads' option to the number of
concurrent builds."
所以我尝试在setup.py文件中使用此选项,如下所示:
from setuptools import setup
from Cython.Build import cythonize
from Cython.Distutils.extension import Extension
EXTENSIONS = [Extension(...)
...
Extension(...)]
setup(name='...',
...
ext_modules=cythonize(EXTENSIONS, nthreads=8),
...)
但我的.pyx文件仍然使用1个线程顺序编译.
我不明白我在这里做错了什么以及如何使用nthreads选项并行执行cythonize编译?
最佳答案
我终于找到了一个并行编译我的cython文件的解决方案:
from setuptools import setup
from Cython.Build import cythonize
from Cython.Distutils.extension import Extension
NB_COMPILE_JOBS = 8
EXTENSIONS = [Extension(...)
...
Extension(...)]
def setup_given_extensions(extensions):
setup(name='...',
...
ext_modules=cythonize(extensions),
...)
def setup_extensions_in_sequential():
setup_given_extensions(EXTENSIONS)
def setup_extensions_in_parallel():
cythonize(EXTENSIONS, nthreads=NB_COMPILE_JOBS)
pool = multiprocessing.Pool(processes=NB_COMPILE_JOBS)
pool.map(setup_given_extensions, EXTENSIONS)
pool.close()
pool.join()
if "build_ext" in sys.argv:
setup_extensions_in_parallel()
else:
setup_extensions_in_sequential()
点击查看更多相关文章
转载注明原文:python – 如何并行执行cython文件编译? - 乐贴网