Advertisement

Python在调用C函数时如何处理数组传递

阅读量:
python调用C函数时的数组传递

2019-4-5

引言:最近为了提高算法运行效率,我决定对算法进行并行优化。最初尝试用Python实现后发现其多线程功能受限于GIL机制(即全局 Interpreter Lock),导致单核处理能力有限。无奈之下我又尝试使用multiprocessing模块来实现多进程处理,在实践中我发现这种方法并不适用于当前算法的设计思路,并非最优选择。于是转而考虑将这部分代码转换为C语言实现,并利用其多线树功能进行优化处理。在实现过程中最令人头疼的问题是如何将Python中的numpy数组数据顺利传递给C函数进行操作。为此我经历了两个晚上的反复调试和学习终于搞通了这一关键环节。

1. ctypes

Python提供了名为ctypes的一个模块来调用C函数。
网上有很多人提示,在Python中使用CTypes功能来实现与C语言动态链接库的调用。
有关CTTypes的详细信息可以在官网找到。

复制代码
    from ctypes import *
2. C函数

2.1 编写C函数

复制代码
    //ctype_test.c
    
    #include <stdio.h>
    
    void onedemiarr(const int * a, int n, int

全部评论 (0)

还没有任何评论哟~