Cython des datetime.pyd
stellt eine datetime_new
-Funktion, die ein Wrapper um PyDateTime_CAPI.DateTime_FromDateAndTime
s datetime.h
‘ist. Jedoch, wenn ich versuche, diese Funktion zu verwenden, bekomme ich sofort einen Segmentierungsfehler, sogar mit gültigen Werten. Hier ist ein minimales Arbeitsbeispiel Cython Code:Cython des cpython.datetime.datetime_new verursacht Segmentation fault
cimport cpython.datetime
cpdef cpython.datetime.datetime construct_datetime():
return cpython.datetime.datetime_new(2017, 12, 1, 12, 30, 15, 0, None)
Hier wird die setup.py
:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize('test_segfault.pyx'))
Und wenn ich es laufen bekomme ich diese:
$ python setup.py build_ext --inplace > /dev/null
$ $ python -c 'from test_segfault import construct_datetime; construct_datetime()'
Segmentation fault (core dumped)
Ich verwende Cython Version 0.25.2 auf Arch Linux, Python 3.6.1:
$ python -c 'import sys; print(sys.version)'
3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
Verwende ich diese Funktion falsch? Ich bin mir bewusst, dass ich hier einfach den Standard cpython.datetime.datetime
Konstruktor aufrufen kann, aber datetime_new
umgeht die Bereichsüberprüfungen, und ich versuche zu sehen, wie viel Zeit die zusätzlichen Prüfungen dauern.
Sicher tat. Meine Güte. Irgendwie hatte ich den Eindruck, dass ich schon von 'cimport cpython.datetime' gerufen wurde, aber nein, das war nur meine Dummheit. Vielen Dank. – Paul