【发布时间】:2019-07-29 05:44:13
【问题描述】:
本质上是这个问题的延伸——Usage of threadpoolexecutor in conjunction with cython's nogil
在这种情况下,我的 getArea2() 方法略有不同
cdef int getArea2(self,double[:] p) nogil:
cdef int area
cdef SphericalPoint spoint
spoint = SphericalPoint()
area = 0
area = self.rect.getArea()
return area
和 .pxd 声明略有不同
cdef extern from "Point.h":
cdef cppclass SphericalPoint(Point):
SphericalPoint() except +
double getCoordinate1()
double getCoordinate2()
void setCoordinate1(double lat)
void setCoordinate2(double lon)
这样我得到了这些编译错误。对象的实例化不正确的任何原因?
我尝试将 spoint 作为指针并实例化对象,但它给了我同样的错误
cdef SphericalPoint *spoint
spoint = new SphericalPoint()
编译 Cython 文件时出错:
cdef int getArea2(self,double[:] p) nogil:
cdef int area
cdef SphericalPoint spoint
spoint = SphericalPoint()
^
------------------------------------------------------------
test.pyx:78:30: Calling gil-requiring function not allowed without gil
【问题讨论】:
-
我认为问题出在
except+,但我不知道你能做些什么。如果 C++ 到 Python 异常的对话肯定需要 GIL,但同样不处理它们会自动使你的整个程序崩溃 -
@DavidW 一如既往地感谢您的回复。您是指 .pxd 文件中 SphericalPoint 上的 except + 吗?我删除了它,我得到了同样的错误
-
稍后我会好好看看。我的想法是
execpt +既是问题又是必要的(所以简单地删除它不是解决方案)。但是,听起来我错了(删除它可以解决当前的问题,但会给您带来其他问题)
标签: c++ compiler-errors cython gil