昨晚偶然间看到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基础--C结构体,枚举,以及常量在Cython中的定义和使用
Cython进阶--用Cython封装Callback函数(续)
额外推荐一本PDF教程《Cython A Guide for Python Programmers》下载:
OReilly.Cython A Guide for Python Programmers
而后,我将采用Cython,针对CTP API进行封装,请关注后续博文.
文章的脚注信息由WordPress的wp-posturl插件自动生成