python – Cython中的并行性不起作用
发布时间:2020-12-20 11:46:51 所属栏目:Python 来源:网络整理
导读:我有一个以下的Cython代码: from cython import parallelfrom libc.stdio cimport printfdef test_func(): cdef int thread_id = -1 with nogil,parallel.parallel(num_threads=10): thread_id = parallel.threadid() printf("Thread ID: %dn",thread_id)
我有一个以下的Cython代码:
from cython import parallel from libc.stdio cimport printf def test_func(): cdef int thread_id = -1 with nogil,parallel.parallel(num_threads=10): thread_id = parallel.threadid() printf("Thread ID: %dn",thread_id) 但是,它始终只启动一个线程,即始终只输出 Thread ID: 0 我在做多线程时做错了什么? 解决方法
Cython使用
OpenMP的多线程功能.
要启用OpenMP,编译器将需要在编译和链接时传递一个额外的标志,否则将忽略代码的并行部分. 一些流行的编译器的标志如下: > GCC = -fopenmp 假设您已将函数保存在test.pyx文件中,则在使用GCC时,以下setup.py应该可以正常工作. 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 如果你想在cython docs中获得比this页面更多的信息,那么如何使用cython的并行性有一个很好的基本指南. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |