一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 解析Python擴(kuò)展模塊的加速方案

解析Python擴(kuò)展模塊的加速方案

2022-01-05 00:15燕山588 Python

這章我們來介紹Python的擴(kuò)展名之ctypes,教大家認(rèn)識ctypes,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步,早日升職加薪

ctypes(一)

 ― 初識

 很多初學(xué)Python的新手,總是嘴邊掛著一句話:“Python是一門膠水語言”。

可是究竟什么是膠水語言呢?相信很多人都不知道,或者誤以為膠水就是可以直接和其他所有語言配合的語言。

雖然如今Python已經(jīng)發(fā)展得很強(qiáng)大了,“膠水語言”這個特性已經(jīng)很少被提及了。但是膠水仍然是它現(xiàn)在應(yīng)用得最廣泛的特性之一。只不過從曾經(jīng)Python為輔變成了如今的Python為主而已。

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

其實(shí)Python自打出生以來就和C語言有莫大的關(guān)聯(lián),它可以調(diào)用現(xiàn)有的C/C++程序,而不用做那些重復(fù)造輪子的事。使得節(jié)約了大量的重新開發(fā)的成本。許多的現(xiàn)有C程序代碼可以用一個Python作為中樞來管理和調(diào)用,就好像這些C程序“被膠水粘住了”一樣。這就是膠水特性的來源。

隨著Python語言的發(fā)展,Python已經(jīng)變得足夠強(qiáng)大和健壯,在不斷優(yōu)化性能的過程中,膠水這一特性被逐漸弱化,因?yàn)镻ython已經(jīng)強(qiáng)大到不需要依附C語言而存在。但是這一特性讓然被保留了下來。那么,既然Python已經(jīng)足夠強(qiáng)大,那么還需要這一特性做什么呢?

說到底,Python是一個解釋型動態(tài)腳本語言,再加上十幾年沒有解決的GIL鎖,無論是執(zhí)行效率還是并發(fā)性都是Python最大的缺點(diǎn)。

因此這個特性的存在給如今的Pythoner一個新的選擇,那些對執(zhí)行效率和并發(fā)性有著極高要求的模塊,使用C來實(shí)現(xiàn)。使用C來輔助Python解決某些特殊情況下的性能問題,成了如今Python社區(qū)中最為普遍的方案,很多人不知道,事實(shí)上很多我們常用的庫都利用了這一特性。

數(shù)據(jù)兼容層

由于Python這一特性是一個大家族,我們先來了解一下Python與C之間做的一個兼容層模塊 ― ctypes 模塊。

了解 ctypes模塊之前,我們需要先了解 ctypes 提供了哪些用于兼容的數(shù)據(jù)類型:

注:一下表格是根據(jù)Python3版本列出,區(qū)別僅僅是原生字符串類型和long整型而已

解析Python擴(kuò)展模塊的加速方案

解析Python擴(kuò)展模塊的加速方案

嘗試共享庫

什么是共享庫?

其實(shí)C語言在經(jīng)過編譯之后不一定要生成可執(zhí)行文件,可以以一種共享給其他程序調(diào)用的“共享庫”的形式存在,其他程序通過調(diào)用這個共享庫,就可以利用這個現(xiàn)有C編譯過的程序了。

為了對各位新手朋友能夠更加產(chǎn)生更加直接的幫助,我們以Windows系統(tǒng)為例,調(diào)用VC共享庫。Windows下默認(rèn)給VC共享庫加上dll擴(kuò)展名后綴。

我們以加載 cdecl 調(diào)用規(guī)則函數(shù)的 cdll 模塊進(jìn)行展示

首先,我們必須要導(dǎo)入 cdll 可以參考一下語句

from ctypes import cdll

然后可以直接通過對 cdll 的屬性訪問獲得 msvcrt.dll 共享庫文件的連接

libc = cdll.msvcrt

接著,我們就可以從這個共享庫中獲得相應(yīng)的VC函數(shù)了,最常見的是printf函數(shù)(ps:不知道有沒有引起一些老司機(jī)的眼淚呢?)

printf = libc.printf

既然已經(jīng)拿到了一個共享庫中的函數(shù),那么我們就來牛刀小試一下吧

解析Python擴(kuò)展模塊的加速方案

我們首先在IDLE里面試著運(yùn)行一下

解析Python擴(kuò)展模塊的加速方案

什么也沒有發(fā)生!貌似被深深的欺騙了!別急,這其中自由原因。

我們先來看看,printf函數(shù)調(diào)用的結(jié)果是什么,使用print查看

解析Python擴(kuò)展模塊的加速方案

看樣子printf函數(shù)的返回值是輸出的字節(jié)數(shù),可是我們還有一個問題沒有解決,那就是,輸出在哪呢?

其實(shí)printf函數(shù)是C的函數(shù),并不會輸出到Python中來,因此要使用控制臺來輸出

解析Python擴(kuò)展模塊的加速方案

是不是已經(jīng)成功輸出了?

在了解這些最基礎(chǔ)的知識以后,我們就可以更加深入的去了解其中相關(guān)的規(guī)則,下次我們會具體介紹一些其中的規(guī)則,讓你對這個庫的使用更加得心應(yīng)手。

以上就是解析Python擴(kuò)展模塊的加速方案的詳細(xì)內(nèi)容,更多關(guān)于Python擴(kuò)展模塊加速方案的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://blog.csdn.net/kj7762/article/details/120239386

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人看的网址 | 黑人k8经典| 大吊小说| 久久永久免费视频 | 国产在线播放91 | 青青青国产在线 | 国产精品国产三级在线专区 | 哇嘎在线精品视频在线观看 | xxxx18日本视频xxxxx | 亚洲成年网站在线777 | 97se亚洲国产综合自在线观看 | 999精品视频这里只有精品 | 精品免费久久久久久影院 | 欧美精品三区 | 国产一精品一av一免费爽爽 | 2019中文字幕在线视频 | 男女视频在线观看网站 | freexxxx性大陆另类 | 被老外操| 久久亚洲一级α片 | 奇米视频7777| 免费国产一级观看完整版 | 亚洲av欧美在我 | 国产免费资源 | 国产高清视频一区二区 | 精品一卡2卡3卡4卡5卡亚洲 | 国产精品午夜性视频网站 | 国产中文在线视频 | 天堂中文在线免费观看 | 亚洲国产在线观看免费视频 | 911爱豆传媒国产 | 丁香五香天堂网 | 午夜综合网 | 日韩中文字幕一区 | 亚洲 欧美 国产 在线 日韩 | 精品无码国产AV一区二区三区 | 秋霞色 | 草逼的视频 | 无码人妻丰满熟妇啪啪网不卡 | 5151hh四虎国产精品 | 9总探花新品牛仔背带裤 |