По сути, это расширение этого вопроса - Использование threadpoolexecutor в сочетании с cython ногил
В этом случае мой метод 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)
При этом я получаю эти ошибки компиляции. Любая причина, по которой создание экземпляра объекта неверно?
Я попытался сделать точку в качестве указателя и создать экземпляр объекта, и это дает мне ту же ошибку.
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, но в равной степени их не обработка автоматически приведет к сбою всей вашей программы. - person DavidW   schedule 29.07.2019execpt +
был и проблемой, и необходимостью (поэтому простое его удаление не было решением). Однако похоже, что я ошибаюсь (удаление его устранило бы непосредственную проблему, но дало бы вам другие проблемы) - person DavidW   schedule 29.07.2019