纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Python扩展模块加速方案 解析Python扩展模块的加速方案

燕山588   2021-09-13 我要评论
想了解解析Python扩展模块的加速方案的相关内容吗燕山588在本文为您仔细讲解Python扩展模块加速方案的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python扩展模块加速,Python扩展模块,Python加速下面大家一起来学习吧

ctypes(一)

 — 初识

 很多初学Python的新手总是嘴边挂着一句话:“Python是一门胶水语言”

可是究竟什么是胶水语言呢?相信很多人都不知道或者误以为胶水就是可以直接和其他所有语言配合的语言

虽然如今Python已经发展得很强大了“胶水语言”这个特性已经很少被提及了但是胶水仍然是它现在应用得最广泛的特性之一只不过从曾经Python为辅变成了如今的Python为主而已

那么到底什么是“胶水特性”呢?

其实Python自打出生以来就和C语言有莫大的关联它可以调用现有的C/C++程序而不用做那些重复造轮子的事使得节约了大量的重新开发的成本许多的现有C程序代码可以用一个Python作为中枢来管理和调用就好像这些C程序“被胶水粘住了”一样这就是胶水特性的来源

随着Python语言的发展Python已经变得足够强大和健壮在不断优化性能的过程中胶水这一特性被逐渐弱化因为Python已经强大到不需要依附C语言而存在但是这一特性让然被保留了下来那么既然Python已经足够强大那么还需要这一特性做什么呢?

说到底Python是一个解释型动态脚本语言再加上十几年没有解决的GIL锁无论是执行效率还是并发性都是Python最大的缺点

因此这个特性的存在给如今的Pythoner一个新的选择那些对执行效率和并发性有着极高要求的模块使用C来实现使用C来辅助Python解决某些特殊情况下的性能问题成了如今Python社区中最为普遍的方案很多人不知道事实上很多我们常用的库都利用了这一特性

数据兼容层

由于Python这一特性是一个大家族我们先来了解一下Python与C之间做的一个兼容层模块 — ctypes 模块

了解 ctypes模块之前我们需要先了解 ctypes 提供了哪些用于兼容的数据类型:

注:一下表格是根据Python3版本列出区别仅仅是原生字符串类型和long整型而已

图片.png

图片.png

尝试共享库

什么是共享库?

其实C语言在经过编译之后不一定要生成可执行文件可以以一种共享给其他程序调用的“共享库”的形式存在其他程序通过调用这个共享库就可以利用这个现有C编译过的程序了

为了对各位新手朋友能够更加产生更加直接的帮助我们以Windows系统为例调用VC共享库Windows下默认给VC共享库加上dll扩展名后缀

我们以加载 cdecl 调用规则函数的 cdll 模块进行展示

首先我们必须要导入 cdll 可以参考一下语句

from ctypes import cdll

然后可以直接通过对 cdll 的属性访问获得 msvcrt.dll 共享库文件的连接

libc = cdll.msvcrt

接着我们就可以从这个共享库中获得相应的VC函数了最常见的是printf函数(ps:不知道有没有引起一些老司机的眼泪呢?)

printf = libc.printf

既然已经拿到了一个共享库中的函数那么我们就来牛刀小试一下吧

我们首先在IDLE里面试着运行一下

什么也没有发生!貌似被深深的欺骗了!别急这其中自由原因

我们先来看看printf函数调用的结果是什么使用print查看

看样子printf函数的返回值是输出的字节数可是我们还有一个问题没有解决那就是输出在哪呢?

其实printf函数是C的函数并不会输出到Python中来因此要使用控制台来输出

是不是已经成功输出了?

在了解这些最基础的知识以后我们就可以更加深入的去了解其中相关的规则下次我们会具体介绍一些其中的规则让你对这个库的使用更加得心应手


相关文章

猜您喜欢

  • Spring中使用@within与@target 详解Spring中使用@within与@target的区别

    想了解详解Spring中使用@within与@target的区别的相关内容吗It''''s my code life.在本文为您仔细讲解Spring中使用@within与@target的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Spring,@within与@target,Spring,@within,@target区别下面大家一起来学习吧..
  • JS打字小游戏 原生JS面向对象实现打字小游戏

    想了解原生JS面向对象实现打字小游戏的相关内容吗我是真的不会前端在本文为您仔细讲解JS打字小游戏的相关知识和一些Code实例欢迎阅读和指正我们先划重点:JS,打字下面大家一起来学习吧..

网友评论

Copyright 2020 www.sopisoft.net 【绿软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式