首页 > 编程语言 >python调用c程序

python调用c程序

时间:2023-05-04 17:47:04浏览次数:37  
标签:task end python 程序 dll int 调用 result time

C代码

文件名 《task.c》

# include<stdio.h>

int task(int n, int p, int m){
	int i,j,k;
	unsigned long s = 0;
	for(i=0;i<n;i++){
		for(j=0;j<p;j++){
			for(k=0;k<m;k++)	{
			    s = s + i + j + k;
			}
		}
}
	return s;
}

编译 在task.c文件目录上打开命令行

gcc -o task.dll -shared -fPIC task.c
或
gcc -o task.so -shared -fPIC task.c

python 代码

from ctypes import cdll, c_long, c_int
from time import time

start = time()
dll = cdll.LoadLibrary('./task.so')
# 指定函数入参类型
dll.task.argtype = [c_int, c_int, c_int]
# 指定函数返回类型
dll.task.restype = c_long
r = dll.task(1000, 2000, 1000)
end = time()
print("c, so: time:{time},result:{r}".format(time=end - start, r=r))

start = time()
dll = cdll.LoadLibrary('./task.dll')
# 指定函数入参类型
dll.task.argtype = [c_int, c_int, c_int]
# 指定函数返回类型
dll.task.restype = c_long
r = dll.task(1000, 2000, 1000)
end = time()
print("c, dll: time:{time},result:{r}".format(time=end - start, r=r))

start = time()


def task(n, p, m):
    s = 0
    for i in range(n):
        for j in range(p):
            for k in range(m):
                s = s + i + j + k
                pass
            pass
        pass
    return s


r = task(1000, 2000, 1000)

end = time()
print("c, py: time:{time},result:{r}".format(time=end - start, r=r))

结果

c, so: time:2.56765079498291,result:3997000000000
c, dll: time:2.2216248512268066,result:3997000000000
c, py: time:113.5812668800354,result:3997000000000

标签:task,end,python,程序,dll,int,调用,result,time
From: https://www.cnblogs.com/hziwei/p/17371988.html

相关文章

  • python_数据分析与挖掘实战_词云
    #-*-coding:utf-8-*-#代码12-1评论去重的代码importpandasaspdimportreimportjieba.possegaspsgimportnumpyasnp#去重,去除完全重复的数据reviews=pd.read_csv("../../data/0404/reviews.csv")reviews=reviews[['content','content_type']......
  • 4D成像毫米波雷达点云数据集VOD(含Python和MATLAB数据解析仿真代码)
    公众号【调皮连续波】【正文】编辑|  调皮哥的小助理     审核|调皮哥1、引言4D成像雷达开源数据集,其实好用的并不多,VOD数据集我个人感觉还可以。这其实也在之前分享过,但是为了更加清楚地展示这个数据集如何使用,本期文章就简单做个分享。在MATLAB环境下可以得到以下的......
  • python 魔术方法
    在Python中,魔术方法(也称为特殊方法或双下划线方法)是一组预定义的方法,它们被用于在类中实现特定的行为。这些方法以两个下划线开头和结尾,例如__init__()和__str__()。以下是几个常见的魔术方法及其作用:__init__():用于初始化类的实例。当创建类对象时,这个方法会自动调用。__st......
  • Python保留两位小数五种常用的方法!
    在Python中,保留两位小数是我们经常会碰到的问题,也是比较常见的需求之一。那么Python中如何保留两位小数?Python保留两位小数的方法有很多种,具体请看下文。1、使用字符串格式化大部分语言都可以使用字符串格式化的方法来实现保留两位小数,Python也不例外。a=12.345......
  • python 闭包、偏函数、数据锁定
    闭包(Closure)是指在一个函数内部定义另外一个函数,并且这个内部函数可以访问外部函数中的变量。通常情况下,当外部函数执行完毕后,局部变量会被销毁,但是闭包可以使得外部函数执行完毕后,其内部函数仍然可以访问外部函数的局部变量。比如下面这个例子:defouter(x):definner(y):......
  • C统计单词程序
    C统计单词程序需求描述读取并报告单词的数量计算字符数和行数识别单词的处理把一个单词定义为不含空白的字符序列既:没有空格、制表符、换行符/***@Author:Lucifer*@Date:4/30/2023,2:12:10PM*@LastEditors:Lucifer*@LastEditTime:4/30/2023,2:12:......
  • C菜单响应程序
    C菜单响应程序需求:提供一个响应程序用户输入正确得到响应用户输入错误重新输入注意:混合字符和数值输入可以识别处理用户输入Enter键示例代码:/***@Author:Lucifer*@Date:5/1/2023,2:43:11PM*@LastEditors:Lucifer*@LastEditTime:5/1/2023,2:43:......
  • python 多态
    在Python3中,多态是指同一个方法或者操作可以在不同的对象上产生不同的行为或结果。这意味着一个函数可以接受不同类型的参数,并且可以表现出不同的行为。生活中的例子如下:假设你想要买一台新电视机,你可能会去电器店看看有哪些电视可供选择。当你开始比较价格和功能时,你可能会发......
  • ch583/ch582/ch573/ch571 central(主机)程序
    本程序是在CH582m上运行的,一、主从连接主机这里可以根据从机的MAC地址进行连接。staticuint8_tPeerAddrDef[B_ADDR_LEN]={0x02,0x02,0x03,0xE4,0xC2,0x84};一般从机在使用的时候不做其他配置时使用的是芯片本身的MAC地址,可以通过修改从机端对应的MAC地址和主机进行连......
  • SDN Python编程创建多数据中心网络
    首先开启OpenDaylightcd/home/ubuntu/karaf-0.7.1/bin/./karaf新开一个终端执行以下操作在/home/ubuntu/mininet/examples目录下新建一个sdn4.py文件输入以下代码frommininet.topoimportTopoclassMyTopo(Topo):def__init__(self):Topo.__init......