C调用Python一个运行时间长的函数,如何实时获取中间结果

teardream 发布于 2016/05/05 17:04
阅读 291
收藏 0


开发工作如下:

使用Python写了一个FTP客户端组件,支持上传与下载,使用C调用该FTP客户端组件的上传与下载都成功。

问题点:

C调用上传与下载时,需要实时获取上传或者进度(即已经上传了多少,或者下载了多少),并把这个值复制到某个共享变量中,给其它线程读取使用(只读取)。

但是文件上传与下载的部分全是在Python中写的,进度也只有Python才能知道。

使用Python的线程机制,貌似也不能成功。


请问各位大神,谁遇到过类似的问题,并解决的?

加载中
1
乌龟壳
乌龟壳

方法一:python根据自己的逻辑把进度print到stdout中,c被动用popen读取它的stdout就能知道进度了。

方法二:python实现信号SIGUSR1打印进度到stdout,c用popen调起来python后,需要的时候发一个SIGUSR1,然后读取python输出的进度

方法三:转变思路,为啥要C调用Python这么别扭,用Python做主流程,需要用C的地方再编译成DLL,python通过ctypes调用

teardream
teardream
项目全部是C,部分用C太麻烦的就用了python
0
newzai
newzai

可以设置回调方法。。由调用方设置回调方法,python 按进度调用回调方法。


teardream
teardream
你这个方法感觉可行,请问有具体的例子不?
返回顶部
顶部