Parallel processing 在prange返回值后,cython代码继续
假设我有以下函数:Parallel processing 在prange返回值后,cython代码继续,parallel-processing,return,cython,Parallel Processing,Return,Cython,假设我有以下函数: @cython.boundscheck(False) @cython.wraparound(False) cpdef bint test(np.int_t [:] values): cdef Py_ssize_t n_values = len(values) cdef int i for i in prange(n_values,nogil=True): if i ==0: return 0 print
@cython.boundscheck(False)
@cython.wraparound(False)
cpdef bint test(np.int_t [:] values):
cdef Py_ssize_t n_values = len(values)
cdef int i
for i in prange(n_values,nogil=True):
if i ==0:
return 0
print 'test'
我是这样运行的:
In [1]: import algos
In [2]: import numpy as np
In [3]: algos.test(np.array([1,2,3,1,4,5]))
test
Out[3]: False
为什么该功能本应在未打印的情况下退出,却仍在打印?有没有办法让函数在返回时退出
谢谢。。我认为他们没有弄清楚的另一个复杂问题是,如果迭代次数足够少(只要完成了一个线程),你也可以在prange
之后继续,这就是你所看到的
对我来说,似乎有效的方法是使用循环的else
子句,它只有在没有提前完成时才会执行:
for i in prange(n_values,nogil=True):
# stuff ...
else:
with gil:
print "test"
快速查看C代码表明,这是适当的检查,应该是可靠的。不过,老实说,这看起来很像一个bug,因为它似乎发生在任何大小的
prange
上,因此可能值得报告。