在给 Python 开发一个 C 模块,引用计数全靠眼睛吗?

2019-07-12 20:13:24 +08:00
 lastright

Python 新手,看了一下 API,对象转字符串需要分两步走,第一步 PyObject_Str 弄出来一个 PyObject,第二步才能从这个临时的 PyObject 拿到 char *的 C-string.

但这个中间的对象我又不敢递减计数,还得等这个 C-string 用完了。。

有点儿麻烦啊,大家平时都这么凭肉眼计数吗。

2496 次点击
所在节点    Python
5 条回复
bigtan
2019-07-12 20:39:38 +08:00
不要自己直接用 Python 接口写,可以用类似 cython 的东西。
anonymous256
2019-07-12 22:09:59 +08:00
你的 C 模块要接受 Python 什么样的数据结构? list,dict 这种高级数据结构吗,还是说只是字符串这种简单的。

c 代码编译成动态库,然后让 python 调用? 或者把核心组件用 python 写,用 cython 编译成 pyd(win 系统)或.so(linux),给其它 python 程序使用。
HelloAmadeus
2019-07-12 22:14:22 +08:00
多看看官方文档,要区分 borrowed reference 和 new reference 的区别,按照 cpython 的源码规范来,引用计数管理比较简单的
ysc3839
2019-07-13 02:43:22 +08:00
如果可以使用 C++ 的话试试 pybind11 ?
lastright
2019-07-13 06:03:13 +08:00
@anonymous256  也需要跟 list,dict 打交道。如果只跟 str 打交道的话,那直接一步 PyUnicode_UnicodeAsXX 就行了,对吧? 至于 C 和 python 谁调用谁,还得听上面的,我是个小兵。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/582499

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX