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

 更新时间:2021年09月13日 09:30:38   作者:燕山588  
这章我们来介绍Python的扩展名之ctypes,教大家认识ctypes,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家多多进步,早日升职加薪

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中来,因此要使用控制台来输出

是不是已经成功输出了?

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

以上就是解析Python扩展模块的加速方案的详细内容,更多关于Python扩展模块加速方案的资料请关注脚本之家其它相关文章!

相关文章

  • python requests 使用快速入门

    python requests 使用快速入门

    这篇文章主要介绍了python requests 使用快速入门教程,使用 Requests 发送网络请求非常简单,具体操作方法,大家参考下本文吧
    2017-08-08
  • python实现图像高斯金字塔的示例代码

    python实现图像高斯金字塔的示例代码

    这篇文章主要介绍了python实现图像高斯金字塔的示例代码,帮助大家更好的利用python处理图片,感兴趣的朋友可以了解下
    2020-12-12
  • 如何用python爬取微博热搜数据并保存

    如何用python爬取微博热搜数据并保存

    这篇文章主要介绍了如何用python爬取微博热搜数据并保存,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 解决pycharm 格式报错tabs和space不一致问题

    解决pycharm 格式报错tabs和space不一致问题

    这篇文章主要介绍了解决pycharm 格式报错tabs和space不一致问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Python中pass的作用与使用教程

    Python中pass的作用与使用教程

    这篇文章主要给大家介绍了关于Python中pass的作用与使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Pytorch环境搭建与基本语法

    Pytorch环境搭建与基本语法

    这篇文章主要介绍了Pytorch环境搭建与基本语法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 使用C语言扩展Python程序的简单入门指引

    使用C语言扩展Python程序的简单入门指引

    这篇文章主要介绍了使用C语言扩展Python程序的简单入门指引,来自于IBM官网网站技术文档,需要的朋友可以参考下
    2015-04-04
  • Python pyinstaller打包exe最新完整图文教程

    Python pyinstaller打包exe最新完整图文教程

    pyinstaller是一个非常简单的打包python的py文件的库,下面这篇文章主要给大家介绍了关于Python pyinstaller打包exe的相关资料,文中介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • python读取pdf格式文档的实现代码

    python读取pdf格式文档的实现代码

    这篇文章主要给大家介绍了关于python读取pdf格式文档的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 生成Jupyter Lab快捷方式的小技巧

    生成Jupyter Lab快捷方式的小技巧

    这篇文章主要介绍了生成Jupyter Lab快捷方式的小技巧,操作迅猛,花费时间少,步骤详细,有需要的朋友可以参考下,希望可以对广大读者朋友有所帮助
    2021-09-09

最新评论