昨晚偶然间看到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插件自动生成
微信扫一扫,打赏作者吧~![[整理]how to run flask with pyqt5](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2021/03/pyqt_flask.png&w=280&h=210&zc=1)
![[已解决]LINK : fatal error LNK1158: cannot run 'rc.exe' 错误的解决办法](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2021/02/Snipaste_2021-02-17_15-18-26-1024x505.png&w=280&h=210&zc=1)
![[已解决]Python扩展模块 error: Unable to find vcvarsall.bat](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2020/11/Snipaste_2020-11-19_10-01-38.png&w=280&h=210&zc=1)
![[整理]PyQt画圆,动态变色](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2020/08/drawCircle.gif&w=280&h=210&zc=1)