位置: 编程技术 - 正文

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 如何访问数据库)

  • 计提增值税会计科目是什么
  • 应交税费是什么会计科目
  • 个人出售满两年和不满两年的住
  • 小规模企业现金流量表
  • 计提工资是包含社保吗
  • 社会团体所涉及的法律
  • 快递费属于什么合同
  • 购置新建商品房,自房屋交付使用
  • 税法对固定资产大修理
  • 药品回扣2021
  • 不同项目的进项税可以抵销项税吗
  • 建筑工程公司项目经理职责
  • 土地租赁合同交不交印花税
  • 公司进项票不够怎么回事
  • 施工企业开专票还是开普票好
  • 当期销项税额等于什么乘以什么
  • 结转增值税的计算公式
  • 化妆品消费税是从价还是从量
  • 花生油 增值税
  • 个人房屋租赁税率2023年
  • 年终一次性奖金个税计算
  • 企业在筹建期间发生的费用
  • 月收入不超10万减免 具体分销售额吗
  • 房地产企业开具零税率发票
  • 应收账款融资的会计如何核算
  • 集团公司内部无偿借贷增值税
  • 广告公司 成本
  • 现金净流量正常值
  • 商贸公司进项税额大
  • 未开发票的结算款怎么入账?
  • 如何修复在感情中受的伤害
  • 货物质量赔偿需要改变收入吗合法吗
  • 成本核算核算要素有哪些
  • 融资租赁和经营租赁哪个更常见
  • 在win7中,如何创建一个TXT文件
  • 进口应税消费品会计分录
  • 协调费用应该怎么表述才合理
  • 购销合同印花税计税依据
  • 克拉莫16首
  • h5调用海康摄像头
  • 一个简单的html文档一般且必须包含哪些标签
  • 现金销售商品的会计分录
  • 帝国cms灵动标签下拉框
  • PYTHON中使用什么符号表示单行注释
  • 不动产投资应该怎么做账
  • 附加税多计提了怎么调整
  • 银行对帐单
  • 公司销售一批物品怎么做
  • 资产负债表的资产按流动性大小排列
  • 商场代收款合法吗
  • 逾期纳税申报会被罚款吗
  • 建账有哪些步骤,每个步骤有哪些注意事项
  • sql时间类型转换
  • MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程
  • sqlserver批量删除数据
  • 当你感觉到你的win2000运行速度明显减慢
  • win10和os x el capitan分屏操作对比视频
  • win8系统对电脑配置要求
  • win8怎么停止自动更新
  • 升级 win10
  • 电脑连不上网怎么解决
  • 电脑w7系统怎么保存图片
  • window八
  • win8升win8.1
  • linux的安装
  • pycharm打开文件怎么运行
  • node socket hang up
  • TNet Tasharen Networking
  • jquery cookie用法
  • 临时占地耕地占用税纳税义务发生时间
  • 电子税务局校验码
  • 广西地方税务局2018年1号公告
  • 农产品进项税额核定扣除
  • 何艳娟出生年月
  • 电子发票和普通发票哪个好
  • 网约车考试全国过了区域没过
  • 云南省新农合网上缴费app
  • 税收征管工作的基本目标
  • 个体工商户银行卡是对公还是对私
  • 消费税,资源税,城市建设维护税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设