位置: 编程技术 - 正文

Python优化技巧之利用ctypes提高执行速度(python最优化)

编辑:rootadmin

推荐整理分享Python优化技巧之利用ctypes提高执行速度(python最优化),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python性能优化方法,python 优化,python 优化,python 优化,python性能优化方法,python最优化,python优化问题求解,python优化问题求解,内容如对您有帮助,希望把文章链接给更多的朋友!

首先给大家分享一个个人在使用python的ctypes调用c库的时候遇到的一个小坑

这次出问题的地方是一个C函数,返回值是malloc生成的字符串地址。平常使用也没问题,也用了有段时间, 没发现什么异常。

这次在测试中,发现使用这个过程会出现“段错误”,造成程序退出了。

经过排查, 确定问题原因是C函数的返回值问题,ctypes默认的函数返回类型是int类型。

需要在使用中设置返回类型,例如:

func.restype = c_char_p

下面我们就来详细探讨下ctypes的使用小技巧

ctypes 库可以让开发者借助C语言进行开发。这个引入C语言的接口可以帮助我们做很多事情,比如需要调用C代码的来提高性能的一些小型问题。通过它你可以接入Windows系统上的 kernel.dll 和 msvcrt.dll 动态链接库,以及Linux系统上的 libc.so.6 库。当然你也可以使用自己的编译好的共享库

我们先来看一个简单的例子 我们使用 Python 求 以内素数,重复这个过程次,并计算运行时间。

Output

.

下面用C语言写一个的 check_prime 函数,然后把它当作共享库(动态链接库)导入

使用以下命令生成 .so (shared object)文件

gcc -shared -o prime.so -fPIC prime.c

Output

Python优化技巧之利用ctypes提高执行速度(python最优化)

我们可以看到很明显的性能差距 这里 有更多的方法去判断一个数是否是素数

再来看一个复杂点的例子 快速排序

mylib.c

gcc -shared -o mylib.so -fPIC mylib.c

使用ctypes有一个麻烦点的地方是原生的C代码使用的类型可能跟Python不能明确的对应上来。比如这里什么是Python中的数组?列表?还是 array 模块中的一个数组。所以我们需要进行转换

test.py

Output

1.

与Python list 的 sort 方法进行对比

Output

2.

至于结构体,需要定义一个类,包含相应的字段和类型

除了导入我们自己写的C语言扩展文件,我们还可以直接导入系统提供的库文件,比如linux下c标准库的实现 glibc

Output

以上都是ctypes的基本技巧,对普通的开发人员来说,基本够用了

更详细的说明请参考:

Python 如何访问外围作用域中的变量 在表达式中引用变量时,Python会按照如下的顺序遍历各个作用域,寻找该变量:当前函数作用域任何外围作用域(比如包含当前函数的其他函数)global

Python中使用asyncio 封装文件读写 前言和网络IO一样,文件读写同样是一个费事的操作。默认情况下,Python使用的是系统的阻塞读写。这意味着在asyncio中如果调用了f=file('xx')f.read()会阻塞

asyncio 的 coroutine对象 与 Future对象使用指南 coroutine与Future的关系看起来两者是一样的,因为都可以用以下的语法来异步获取结果,result=awaitfutureresult=awaitcoroutine实际上,coroutine是生成器函数,它

标签: python最优化

本文链接地址:https://www.jiuchutong.com/biancheng/385411.html 转载请保留说明!

上一篇:Python 中的with关键字使用详解(python3 with语句)

下一篇:Python 如何访问外围作用域中的变量(python 如何访问数据库)

  • 资产负债表利润表和现金流量表之间的关系
  • 什么是实收资本其入账价值如何确定
  • 企业社会保险登记表
  • 向保险公司缴纳的保险费可以税前扣除吗
  • 怎么报企业所得税季报
  • 水费3个点税
  • 弥补上年亏损的成语
  • 应收账款和应付账款对冲会计分录
  • 为什么出现补交税
  • 一般纳税人取得3%专票可以抵扣吗
  • 职工薪酬包括哪三个方面
  • 冲销预付账款后该如何做账务处理呢?
  • 营改增操作指引
  • 记账凭证一定要签字吗
  • 那些发票可以报
  • 收的标书收入增值税多少
  • 个体户没有三证合一,年检
  • 农产品发票抵扣需要勾选吗
  • 个人汽车租给公司租金需多少钱?
  • 非居民企业啥意思
  • 税收优惠政策2020年
  • 分步法所分的成本计算步骤应是实际的生产步骤
  • 应收账款周转次数计算方法
  • 不动产登记房屋已竣工的材料
  • 员工因违反公司规章制度被辞退有补偿吗
  • 年度利润总额是会计利润吗
  • 网络连接错误是什么意思啊
  • igfxext.exe
  • 备用金借款有利息吗
  • 修建污水厂需要办理哪些审批
  • 其他应收款可以和其他应付款对冲吗
  • php显示文件目录及路径
  • 销售点的增值税计算公式
  • 搭建自己的php框架
  • php生成随机字母数字代码
  • php 命名空间 通俗易懂
  • 应收账款的账期是什么意思
  • 蓝桥杯真题c语言
  • 浅谈当下火热的行业
  • spring boot s
  • 包装费包含什么
  • 将本月发生的制造费用总额按生产工人
  • 设备购买与租赁的分析中,购买优于租赁的条件是
  • 企业合并结果
  • sql server如何操作
  • 个体工商户营业执照注销流程
  • mysql官方性能报告
  • 金税盘维护费应该计入什么科目
  • 估价入帐能跨年吗
  • 冲抵和抵扣
  • 合同终止已开发怎么办
  • 工会会计有工资么
  • 怎样可以冲销企业微信
  • 机票报销需要什么单据
  • 主营业务利润率反映了企业的什么能力
  • Linux下MySQL 5.5/5.6的修改字符集编码为UTF8的方法
  • freebsd 安装
  • 虚拟机增加磁盘选择物理磁盘分区
  • 怎样升级智慧中小学版本软件
  • linux系统详解
  • win8查看内存
  • 局域网win7 64位旗舰版共享打印机状态错误0x0000000a的详细图文解决方法
  • ie等级
  • cocos 2d x
  • css布局的经典网站
  • about ContentProvider
  • 批处理隐藏盘符
  • 深入理解python特性 pdf
  • [置顶]马粥街残酷史
  • python使用pymysql实现操作mysql
  • js cookie存取
  • js如何使用
  • 卷票真伪查询系统国税
  • 如何开具红字发票明细
  • 冲减多计提的坏账准备
  • 国家税务局网上电子税务局官网天津
  • 稳岗补贴是否需要发放
  • 交完车船税后地税局都给什么
  • 江西自考招考办
  • 港澳台人士可以在上海申请积分吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设