位置: 编程技术 - 正文

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

  • 应交税费转结哪里去
  • 新公司个税申报怎么操作
  • 简易计税方法使用范围
  • 小规模在税务局开的专票已交税,如何在税务平台申报
  • 装修收入如何填报增值税表
  • 加工企业怎么记账
  • 小微企业所得税税率2.5% 10% 25%
  • 运输服务有3%的税率吗
  • 营业外收入记账
  • 调整以前年度销售费用会计分录
  • 机票行业一定要开发票吗?
  • 多缴的增值税能退吗
  • 企业所得税清算期间
  • 发票票种核定怎么提交
  • 原始凭证是出纳粘贴还是会计粘贴
  • 验旧作废发票遗失了如何验旧?
  • 固定资产的运费和关税计入什么费用
  • 什么企业需要纳税申报
  • 企业购买股票投资
  • 什么经营范围可以开培训费
  • 增值税申报表附表二填表说明
  • 免税收入与不征税收入的区别与联系
  • 餐饮业代金券怎么用
  • 员工付款的手续费怎么算
  • 怎么利用腾讯手机号找人
  • 个人开发是什么意思
  • windows问题报告桌面一直闪
  • 充值会员卡销售话语
  • 购买理财产品收到的利息分录
  • 代购机票骗局
  • win10电脑电源选项怎样设置最好
  • 结转本月发生的费用
  • php自定义函数的语法格式
  • Uni-app + Vue3 + TS +Vite 创建项目
  • 运动目标检测算法
  • 烟花绽放的除夕夜题目
  • 海岸边上
  • 坏账准备账务处理程序
  • 使用灭火器人要站在上风口还是下风口
  • 每月计提的工资包含社保吗
  • mysqli
  • mysql备份导入
  • 零申报社保是否可以报销
  • 发票勾选后什么时候开票
  • 如何恢复sql数据库
  • 安装sql server 2008提示重新启动计算机
  • 生活垃圾处理费合法吗
  • 企业的纳税申报数据来源于
  • 缴纳的工会经费现金流量表怎么记
  • 同级财政和本级财政
  • 餐厅打包盒收费标准通知
  • 如何查询工商局每天入驻情况
  • 车辆购置税计入什么科目
  • 交易性金融资产公允价值变动怎么算
  • 搞活动的现金红包怎么用
  • 其他业务收入的现金流量项目
  • 一般纳税人拿到普票怎么处理账务
  • 所有者权益变动表图片
  • 没有发票的费用怎么做凭证
  • 净资产总计等于什么
  • 明细账建账的步骤
  • mysql字符集设置命令
  • vista win10
  • 电脑如何安装Anaconda
  • 富士通FUJITSU笔记本电脑开机进入BIOS的方法(F2)
  • Mac Chrome打开HTTPS证书错误问题解决方法
  • win7开始菜单在哪个文件夹
  • win10系统电脑无法开机怎么办
  • linux远程操作常用命令
  • win7 32位中文语言包
  • msqry32.exe进程是什么文件 作用是什么 msqry32进程查询
  • win7笔记本触摸板怎么用滑轮
  • windows8开机启动项在哪里设置
  • win7系统鼠标指针形状介绍
  • unity读取文本文件
  • js下拉列表框
  • flask框架官方文档
  • 深圳龙岗有几个街道
  • 国地税账号密码
  • 进口小麦关税税率是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设