python使用ctypes模块调用C++计算斐波那契数列

image description

python使用ctypes模块调用C++计算斐波那契数列

fbi.cpp

//
//  fbi.cpp
//  c++_python3
//
//  Created by 请叫我算术嘉 on 2020/3/14.
//  Copyright © 2020 请叫我算术嘉. All rights reserved.
//

#include<iostream>


class Fbi{
    public:
    Fbi(){};
    ~Fbi(){};
    int fbi(int n);
};

int Fbi::fbi(int n)
{
    if (n<2)
    {
        return n==0 ? 0:1;
    }
    return fbi(n-1)+fbi(n-2);

}

extern "C"
int fbi(int n)
{
    Fbi t;
    return t.fbi(n);
}

生成.so文件

g++ -o fbi.so -shared -fPIC fbi.cpp 

test.py

import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("fbi.so")
num1 = ctypes.c_int(1)
print(lib.fbi(40))

运行结果几乎是秒出

和python比较一下吧,公平起见,都是递归

import ctypes


def execute_time(func):
    from time import time

    # 定义嵌套函数,用来打印出装饰的函数的执行时间
    def wrapper(*args, **kwargs):
        # 定义开始时间
        start = time()
        # 执行函数
        func_return = func(*args, **kwargs)
        # 定义结束时间
        end = time()
        # 打印方法名称和其执行时间
        print('{}() execute time: {}s'.format(func.__name__, end - start))
        # 返回func的返回值
        return func_return

    # 返回嵌套的函数
    return wrapper


ll = ctypes.cdll.LoadLibrary
lib = ll("fbi.so")
# num1 = ctypes.c_int(1)

@execute_time
def fbi_cpp(n):
    print(lib.fbi(n))

@execute_time
def fbi_python_run(n):
    fbi_python(n)


def fbi_python(n):
    if n == 1 or n == 2:
        return 1
    return fbi_python(n - 1) + fbi_python(n - 2)


if __name__ == "__main__":
    fbi_cpp(40)
    fbi_python_run(40)

结果如下

fbi_cpp() execute time: 0.7941341400146484s
fbi_python_run() execute time: 30.452177047729492s
    ArithmeticJia         0         75         Python         4    

David Ramon

ArithmeticJia

www.guanacossj.com

Life is Short,You need Python

Related Posts

You may like these post too

image description

python中的GIL锁

为什么我们说python中无法实现真正的多线程呢,这是因为在C语言写的python解释器中存在全局解释器锁,由于全局解释器锁的存在,在同一时间内,python解释器只能运行一个线程的代码,这大大影响了python多线程的性能。而这个解释器锁由于历史原因,现在几乎无法消除。 python GIL

image description

python多进程和进程池

##写在最前面: linux下可使用 fork 函数 通常使用 multiprocessing更常见 我们分别使用单进程和多进程处理run函数 ```python import time,os from multiprocessing import P

Comments on this post

0 comments

Leave a comment

it’s easy to post a comment

image description
image description
image description
image description
image description
image description
image description
image description
image description

Copyright © 2019.Company name All rights reserved.苏ICP备19007197号