位置: 编程技术 - 正文

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

  • 销售商品返还现金
  • 印花税滞纳金如何计算日期
  • 销售利税率计算公式及分析
  • 电子税务局怎么登录
  • 企业所得税计提表模板
  • 个体户城建税优惠政策
  • 垫付生育津贴的钱怎么算
  • 销售补差怎么做分析
  • 企业搬迁到外省之前的债务怎么处理
  • 租赁房屋增值税
  • 无形资产的累计摊销是什么意思
  • 银联交易手续费
  • 收到联营单位投入的设备一台
  • 印花税已经缴纳了但是还未申报
  • 农场管委会是什么性质单位
  • 制造费用如何分摊到产品的成本
  • 以前年度损益申报怎么报所得税
  • 发票遗失如何补开
  • mac 10.14.1
  • 苹果电脑里的finder是什么
  • win10应用商店下载的软件在哪
  • AquariumDesktop.exe进程危险吗 AquariumDesktop是什么进程
  • php魔术方法的讲解与使用
  • 永续债计入哪个会计科目
  • 归属性质
  • php生成xml文件
  • php文件上传后只显示了路径怎么办啊
  • 由浅入深英语怎么说
  • node安装配置环境变量
  • 跨的基本功有哪些
  • 安卓京东抢购
  • 上年折旧费多计提了,本年怎么调
  • 个体工商户季报还是月报
  • 管理费用包括项目成本吗
  • 增值税专用发票电子版
  • 个人退税证明怎么开具
  • 一般纳税人哪些行业可以简易计税
  • 如何用wordpress
  • 低于净资产增资 纳税
  • sql server 2008数据库
  • 其他资本公积主要包括
  • sql server 2005 win10
  • 预收账款的核算处理
  • 内资非独立核算的企业
  • 企业其他应付款减少说明什么
  • 其他债权投资期末公允价值的变动应当计入
  • 金蝶旗舰版的数据怎么在标准版打开
  • 没有报关单可以出口吗
  • 汇算清缴可以调整主营业务成本吗
  • 房屋租赁公司装修费会计分录
  • 会计凭证移交凭证需要哪些程序
  • 在sqlserver数据库中,执行sql语句
  • 查找共享打印机所在的电脑
  • win8出现问题需要重启
  • linux所谓的free
  • 重装系统需要主机吗
  • 笔记本电脑bios更新
  • 备份ubuntu系统
  • mac 10.8.5升级
  • SUSE Linux Enterprise Server 设置IP地址、网关、DNS的方法
  • 查看linux系统日志命令
  • win10企业版教育版专业版哪个好
  • win102021更新
  • win7系统中怎么查看隐藏文件
  • 酵母菌代谢类型为
  • 零基础搭建直播室与云直播平台
  • eclipse的android配置
  • 获取本站的context root
  • android自定义样式
  • dom编程艺术这本书好吗
  • android线程间通信的几种方法
  • ansible客户端需要装python
  • python pil gif
  • jQuery实现ajax的叠加和停止(终止ajax请求)
  • Python中MySQL数据迁移到MongoDB脚本的方法
  • 中国的外籍
  • 广东地税服务电话
  • 福建泉州电子税务局
  • 城市维护建设税怎么算
  • 企业资金运转资金投放
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设