【发布时间】:2015-10-08 10:49:32
【问题描述】:
cpython "time.py" 中的函数几乎只是“通过”定义。我猜它的功能实现在"lib/python2.7/lib-dynload/time.so",所以我想知道cpython解释器是如何调用".so"文件的?我知道 ctypes,但我找不到 cpython 中的“时间”模块在哪里使用它。
【问题讨论】:
标签: python c interpreter cpython
cpython "time.py" 中的函数几乎只是“通过”定义。我猜它的功能实现在"lib/python2.7/lib-dynload/time.so",所以我想知道cpython解释器是如何调用".so"文件的?我知道 ctypes,但我找不到 cpython 中的“时间”模块在哪里使用它。
【问题讨论】:
标签: python c interpreter cpython
简短的回答是 Python 为 C 程序提供了一个 API(Python / C API),它允许在 C 代码中定义/实例化 Python 对象,包括函数(请参阅extending Python with C)。有一种称为Py_InitModule(及其变体)的方法,它可以在 C 代码中实例化 Python 模块并注册方法定义和设置/添加字段。
就 Python 如何加载“time.so”而言,它可能使用 dlopen C 函数来加载,该函数允许库在运行时动态打开(或者,在 Windows 上,等效的 LoadLibrary)。使用这种方法,可以检索具有特定名称的函数(例如,Python 可以强制任何实现 Python 模块的“.so”文件必须提供具有特殊签名的初始化函数)然后调用它,允许初始化函数来注册各种定义。
【讨论】: