位置: 编程技术 - 正文

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

  • 建筑公司购入的水泥等材料如果是做成本的怎么做分录
  • 存货跌价准备在财务报表哪里看
  • 待认证进项税额认证以后怎么做分录
  • 电子承兑被拒付(可拒付追索)
  • 去年开的专票今年可以作废吗
  • 出口退税发票必须是专票吗
  • 长期待摊费用摊销计入什么会计科目
  • 小规模纳税人代理记账一般多少钱
  • 开票时显示没有原票抄报信息
  • 设计服务需要交文化建设费吗
  • 增值税发票在邮寄途中丢了怎么办
  • 房屋租赁合同印花税谁交
  • 房地产企业停止经营后未抵减完的预缴增值税可以退吗
  • 收到低值资产报废回收款账务处理
  • 发票存在哪些税务风险?
  • 研发费用加计扣除条件
  • 负债类会计科目表
  • 开具正数发票中如何体现扣款
  • 社保基数超过工资
  • 当月发出的货还有运费吗
  • 企业购买汽车时需要交哪些税?
  • 旅行社代订机票可以入差旅费报销吗
  • 自产自销税点
  • 为什么餐费不能计入在差旅费
  • 写支票人民币大写有角需要写整吗
  • 企业所得税中准予扣除的损失
  • 原材料质量问题退回
  • 发放的离职补偿金怎么做账
  • 工地开工购买的鞭炮怎么入账
  • 交割单和对账单一样吗
  • 住房公积金扣除标准为每月
  • windows11正式版好用吗
  • 在win7系统中,添加打印机驱动程序
  • 两免三减半条件
  • php做
  • Win11文件夹怎么加密设置密码
  • kb4592438安装失败
  • 购入已提完折旧的固定资产怎么入账
  • PHP:is_executable()的用法_Filesystem函数
  • 未开票收入以后必须开票吗
  • 无形资产处置计入哪里
  • 发财树怎么修剪枝叶视频教程
  • 申报补缴是什么意思
  • php读取txt文件内容
  • phpqrcode
  • 合伙 利润分配
  • 数据结构—python语言描述
  • 大学生创新创业平台
  • 在创业板上市公司首次公开发行股票的条件
  • 哪些税计入税金及附加
  • 个人所得税如何计算
  • 施工一个月多少钱
  • 现金支票存根联和正联怎么盖章
  • 转回存货跌价准备对递延所得税资产的影响
  • 物流公司挂靠车辆如何做账?
  • 作废发票丢了罚款多少
  • sqlserver导出数据库及表结构
  • sql1068错误
  • windows sfc命令
  • ubuntu里怎么装软件
  • linux下32位机与64位机基本数据类型长度区别介绍
  • ntfs权限设置步骤
  • 如何返回系统
  • freebsd连接wifi
  • tensorflowoom
  • 构造函数中super()的作用
  • cocos2d-js-min.js
  • 如何进行js 的测试
  • 深入浅出Struts
  • Node.js中的construct构造函数
  • python提供三种基本数值类型
  • 拨号器怎么用
  • jquery 动态绑定click事件
  • 增值税红字发票怎么做账
  • 吉林省国税税务总局官网
  • 潍坊市区面积多大
  • 河北国家税务局官网站
  • 购销合同印花税最新政策2023
  • 预先支付货款
  • 城镇土地使用税减免税政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设