【整理】从stack overflow的一个问题引发的思考(C++封装为Python可用接口)

昨晚偶然间看到stack overflow上的一个问题:http://stackoverflow.com/questions/21295624/problems-running-exported-c-functions-on-separate-threads-from-python

早在一年之前,我曾经尝试拿 SWIG 来封装 C++的一个库,方便在Python里调用. 我封装的是C++ CTP库(上海期货信息技术提供的CTP API,下载地址:http://www.sfit.com.cn/5_2_DocumentDown.htm)

由于CTP底层库采用了线程,然而 SWIG 这货对Python的GIL支持极不友好,导致,我封装代码,编译调试很久,总是收不到底层的callback函数,最后放弃了这个方案.

SWIG的优点也是有的,除去线程的支持不大好的缺点,其他的易封装,易使用,编译简单都是SWIG的优点.无奈封装的是CTP API,故放弃.

==============================================

后来偶然遇到一个大牛,采用Python C API的方式,封装了CTP的API,而且封装出来的库使用与C++的用法一致,保留了原汁原味的CTP API味道,很令人称赞,参考地址:

https://github.com/shizhuolin/PyCTP

由于采用的是Python C API方式封装,故,中间转换部分应该花费了作者大量的精力,而且此方法对于开发人员二次编译上手难度高,所以,我还提供出来一份编译指南,合并到了master分支,为该开源库贡献自己的一份力量.

当然我也极其希望自己可以采取一种方式进行CTP API的封装,在看到开头的那个问答之后,对我来说,简直就是一个好消息,因为Cython对GIL的支持极其友好,我或许可以拿Cython进行一试.

再后来,翻阅了一些资料,如下是我整理的Cython的参考资料:

Cython官方文档

Cython基础--Cython入门

Cython基础--Cython的类型

Cython基础--Cython的函数

Cython基础--C结构体,枚举,以及常量在Cython中的定义和使用

Cython基础--Cython的语句和表达式

Cython基础--Cython的类

Cython进阶--用Cython封装Callback函数

Cython进阶--用Cython封装Callback函数(续)

Cython的学习方法

额外推荐一本PDF教程《Cython A Guide for Python Programmers》下载:
OReilly.Cython A Guide for Python Programmers

而后,我将采用Cython,针对CTP API进行封装,请关注后续博文.

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: