にギルを削除することはできませんCタイプの拡張ですので、Pythonオブジェクトではないはずですが、この場合はnogilを適用できません。なぜこれが起こっているのか、私はやや無知です。は、私はというエラーを取得していますなぜ私は理解していないC型エクステンション反復
cdef class Fraction:
cdef int _numerator
cdef int _denominator
cdef int numerator
cdef int denominator
def __cinit__(self, numerator=0, denominator=None, bint _normalize=True):
self._numerator = numerator
self._denominator = denominator
@cython.boundscheck(False)
@cython.wraparound(False)
cpdef gaussian_inverse_cy():
cdef int a = 1, b = 2, i
with nogil:
for i in prange(10000):
Fraction(a,b)
実際にはPythonオブジェクトです。 cdefクラスを使用すると、**組み込みの新しいPythonタイプ** http://docs.cython.org/ja/latest/src/userguide/extension_types.html#introductionを作成できます。これは、gilなしでは作成/操作できません。 – oz1
これを小さな 'with gil:'ブロックに入れることができるかもしれません。明らかに、この場合はループ全体になりますが、実際の例では、ループのほんの一部である可能性があります。私はあなたがGILなしで 'cdef'属性にアクセスすることができなければならないと思います。 – DavidW
@MLhackerこれが役立つかどうかを確認してください:https://stackoverflow.com/a/21135087/6037118 – Matt