随笔分类 -  C语言扩展Python模块

摘要:因为项目需要,需要优化已有的Python代码。目前Python代码的执行过程是将Python代码转变成一行行指令,然后解释器解释指令的执行,调用到C代码层。如果去掉指令解释这个阶段,直接进入C代码层,效率就比较高了。如果用之前所述的使用Python C API将Python代码改造为C代码并作为Py 阅读全文
posted @ 2017-09-09 13:50 建木 阅读(29620) 评论(2) 推荐(8) 编辑
摘要:在上一节中,讨论了在用C语言扩展Python模块时,应该如何处理无处不在的引用计数问题。重点关注的是在实现一个C Python的函数时,对于一个PyObject对象,何时调用Py_INCREF和Py_DECREF。在编写C语言代码时,需要了解Python提供的C/C++ API的实现细节,特别是有的 阅读全文
posted @ 2017-09-03 14:20 建木 阅读(6808) 评论(0) 推荐(1) 编辑
摘要:承接上文,发现在使用Python C/C++ API扩展Python模块时,总要在各种各样的地方考虑到引用计数问题,稍不留神可能会导致扩展的模块存在内存泄漏。引用计数问题是C语言扩展Python模块最头疼的地方,需要由程序员对使用的每个C API都要充分了解,甚至要熟悉源码才能精确掌握什么时候引用计 阅读全文
posted @ 2017-09-02 16:07 建木 阅读(3166) 评论(0) 推荐(3) 编辑
摘要:在上一节中,通过一个简单的例子介绍了C语言扩展Python内建模块的整体流程,从本节开始讲开始深入讨论一些细节问题,在细节讨论中从始至终都会涉及【引用计数】的问题。首先讨论C语言封装的Python函数的参数解析与函数结果返回的封装。 参数解析 最常用的接口是 arg是一个tuple object,从 阅读全文
posted @ 2017-08-15 20:26 建木 阅读(3549) 评论(0) 推荐(1) 编辑
摘要:本节使用一个简单的例子引出Python C/C++ API的详细使用方法。针对的是CPython的解释器。 目标:创建一个Python内建模块test,提供一个功能函数distance, 计算空间中两个点之间的距离。 可以在Python代码这样使用test模块: 先上代码: [test.c] [So 阅读全文
posted @ 2017-08-11 16:51 建木 阅读(3144) 评论(0) 推荐(1) 编辑
摘要:本系列将介绍如何用C/C++扩展Python模块,使用C语言编写Python模块,添加到Python中作为一个built-in模块。Python与C之间的交互目前有几种方案: 1. 原生的Python C/C++ API, 官网有非常详细的文档说明 2. boost python,一个C++的编程框 阅读全文
posted @ 2017-08-11 11:53 建木 阅读(4966) 评论(0) 推荐(1) 编辑