python - Cython的cpython.datetime.datetime_new导致段错误

标签 python datetime cython

Cython 的 datetime.pyd公开一个 datetime_new 函数,它是 datetime.hPyDateTime_CAPI.DateTime_FromDateAndTime 的包装器。但是,每当我实际尝试使用此函数时,即使使用有效值,我也会立即收到段错误。这是 Cython 代码的最小工作示例:

cimport cpython.datetime

cpdef cpython.datetime.datetime construct_datetime():
    return cpython.datetime.datetime_new(2017, 12, 1, 12, 30, 15, 0, None)

这是setup.py:

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize('test_segfault.pyx'))

如果我运行它,我会得到:

$ python setup.py build_ext --inplace > /dev/null
$ $ python -c 'from test_segfault import construct_datetime; construct_datetime()'
Segmentation fault (core dumped)

我在 Arch Linux、Python 3.6.1 上使用 Cython 版本 0.25.2:

$ 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)]

我这个功能用错了吗?我知道我可以在此处调用标准 cpython.datetime.datetime 构造函数,但是 datetime_new 绕过范围检查,并且我正在尝试查看需要多长时间需要进行额外检查。

最佳答案

你忘了initialize the datetime C API :

# Datetime C API initialization function.
# You have to call it before any usage of DateTime CAPI functions.
cdef inline void import_datetime():
    PyDateTime_IMPORT

关于python - Cython的cpython.datetime.datetime_new导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46881413/

相关文章:

php - XMLRPC - Python 服务器,PHP 客户端。没有一致性?

python - Cython 编译错误 : dynamic module does not define module export function

c# - LINQ 查询中的 MySqlDateTime

python - cProfile 没有属性 runctx

python - 如何注销所有进度条?

python - python 列表中的值被替换

javascript - 从 HH :MM format 计算总时间

date - hive cast string to date in 'dd/MMM/yyyy' format order by and group by issue

python - 如何从 Cython 中的另一个线程设置 future\add 到队列的结果?

python - 编译 cython Hello World 示例 : don't know how to compile C/C++ code on platform