亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Python > 正文

python使用ctypes調用擴展模塊的實例方法

2024-09-09 19:03:40
字體:
來源:轉載
供稿:網友

楔子

我們知道python的執行效率不是很高,而且由于GIL的原因,導致python不能充分利用多核CPU。一般的解決方式是使用多進程,但是多進程開銷比較大,而且進程之間的通信也會比較麻煩。因此在解決效率問題上,我們會把那些比較耗時的模塊使用C或者C++編寫,然后編譯成動態鏈接庫,Windows上面是dll,linux上面則是so,編譯好之后,交給python去調用。而且通過擴展模塊的方式還可以解決python的GIL的問題,因此如果想要利用多核,我們仍然可以通過擴展模塊的方式。

python如何調用擴展模塊

python調用擴展模塊的一種比較簡單的方式就是使用ctypes這個庫,這個庫是python官方提供的,任何一個版本的python都可以使用,我們通過ctypes可以很輕松地調用擴展模塊。

演示

#include <stdio.h>void test(){  printf("hello world/n");}

我們定義了一個很簡單的函數,下面我們就可以將其編譯成擴展模塊了。在Windows是dll,linux上是so,編譯的命令是一樣的。我這里以Windows 為例,記得在Windows上要安裝MinGW,或者安裝VsCode,我這里使用的是MinGW,因為VsCode太大了。

gcc -o dll文件或者so文件 -shared c或者c++源文件

我這里的C源文件叫做1.c,我們編譯成mmp.dll吧,所以命令就可以這么寫:gcc -o mmp.dll -shared 1.c

下面就可以使用python去調用了。

import ctypes# 使用ctypes很簡單,直接import進來,然后使用ctypes.CDLL這個類來加載動態模塊# 如果在Windows上還可以使用ctypes.WinDLL。# 因為看ctypes源碼的話,會發現WinDLL也是一個類并且繼承自CDLL# 所以在linux上使用ctypes.CDLL,# 而在Windows上既可以使用WinDLL、也可以使用CDLL加載動態模塊lib = ctypes.CDLL("./mmp.dll") # 加載之后就得到了擴展模塊# 我們可以直接通過.的方式去調用里面的函數了,會發現成功打印lib.test() # hello world# 但是為了確定是否存在這個函數,我們一般會使用反射去獲取# 因為如果函數不存在通過.的方式調用會拋異常的func = getattr(lib, "test", None)if func:  print(func) # <_FuncPtr object at 0x0000029F75F315F0>  func() # hello world# 不存在test_xx這個函數,所以得到的結果為Nonefunc1 = getattr(lib, "test_xx", None)print(func1) # None

所以使用ctypes去調用擴展模塊非常方便

1.通過ctypes.CDLL("dll或者so的路徑"),如果是Windows還可以使用ctypes.WinDLL("dll路徑")。另外這兩種加載方式分別等價于:ctypes.CDLL("dll或者so的路徑") == ctypes.cdll.LoadLibrary("dll或者so的路徑"),ctypes.WinDLL("dll路徑") == ctypes.windll.LoadLibrary("dll路徑")。但是注意的是:linux上只能使用ctypes.CDLL和ctypes.cdll.LoadLibrary,而Windows上ctypes.CDLL、ctypes.cdll.LoadLibrary、ctypes.WinDLL、ctypes.windll.LoadLibrary都可以使用。但是一般我們都使用ctypes.CDLL即可,另外注意的是:dll或者so文件的路徑最好是絕對路徑,即便不是也要表明層級,比如我們這里的py文件和dll文件是在同一個目錄下,但是我們加載的時候不可以寫mmp.dll,這樣會報錯找不到,要寫成./mmp.dll。

2.加載動態模塊之后會返回一個對象,我們上面起名為lib,這個lib就是得到的擴展模塊了。

3.然后可以直接通過lib調用里面的函數,但是一般我們會使用反射的方式來獲取,因為不知道函數到底存不存在,如果不存在直接調用會拋出異常,如果存在這個函數我們才會執行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线免播放器| 国产一区二区三区四区福利| 国产在线观看91精品一区| 少妇av一区二区三区| 丰满岳妇乱一区二区三区| 国产剧情日韩欧美| 国产在线视频欧美| 国内偷自视频区视频综合| 日本视频久久久| 亚洲精品99久久久久| 成人日韩av在线| 国产玖玖精品视频| 91精品在线看| 色中色综合影院手机版在线观看| 欧美xxxx14xxxxx性爽| 正在播放欧美视频| 欧美精品精品精品精品免费| 成人有码视频在线播放| 亚洲人成电影在线观看天堂色| 68精品国产免费久久久久久婷婷| 超碰日本道色综合久久综合| 国产精品海角社区在线观看| 精品久久香蕉国产线看观看亚洲| 日本aⅴ大伊香蕉精品视频| 亚洲乱码一区av黑人高潮| 成人h片在线播放免费网站| 日韩精品在线看| 97久久精品人搡人人玩| 欧美性xxxx在线播放| 色久欧美在线视频观看| 久久精品99久久香蕉国产色戒| 色一区av在线| 欧美裸体视频网站| 久久99精品视频一区97| 国产精品欧美日韩| 欧美交受高潮1| 国产成人精品电影久久久| 日本人成精品视频在线| 国产香蕉一区二区三区在线视频| 国产+成+人+亚洲欧洲| 亚洲欧美成人一区二区在线电影| 国产精品私拍pans大尺度在线| 国产精品激情av在线播放| 亚洲美女精品久久| 欧美不卡视频一区发布| 国产91精品青草社区| 亚洲精品国精品久久99热| 欧美日韩第一视频| 成人啪啪免费看| 日本成人精品在线| 欧洲成人在线观看| 亚洲人成电影网站色www| 九九久久精品一区| 亚洲福利在线观看| 亚洲理论电影网| 国产精品99导航| 精品中文字幕在线观看| 日韩电视剧在线观看免费网站| 日韩成人在线视频观看| 91九色国产社区在线观看| 亚洲成人国产精品| 精品一区二区三区四区| 亚洲国产精品大全| 成人av在线天堂| 欧美怡春院一区二区三区| 亚洲免费av网址| 久久国产精彩视频| www日韩欧美| 精品一区二区三区三区| 国产高清视频一区三区| 亚洲国产精品999| 美女扒开尿口让男人操亚洲视频网站| 欧美老女人bb| 亚洲欧美在线看| 97国产真实伦对白精彩视频8| 中文字幕在线精品| 91精品国产综合久久香蕉最新版| 久久影院免费观看| 性欧美视频videos6一9| 欧美电影免费观看网站| 日韩成人免费视频| 国产一区红桃视频| 国产精品视频最多的网站| 亚洲第一精品电影| 性欧美xxxx视频在线观看| 91免费版网站入口| 欧美成人在线影院| 欧美裸体xxxx| 欧美成人午夜激情视频| 亚洲欧美制服综合另类| 136fldh精品导航福利| 亚洲综合成人婷婷小说| 91精品久久久久久久久久久久久| 中文字幕日韩在线观看| 欧美亚洲日本黄色| 日韩av在线资源| 孩xxxx性bbbb欧美| 欧美日本在线视频中文字字幕| 国产成人精品在线观看| 久久久999国产精品| 欧美日本精品在线| 精品日韩中文字幕| 最近2019年日本中文免费字幕| 精品国产一区av| 色琪琪综合男人的天堂aⅴ视频| 正在播放欧美一区| 国产成人av在线播放| 精品一区二区三区四区| 热re91久久精品国99热蜜臀| 日韩精品www| 日韩电影在线观看永久视频免费网站| 国产精品视频精品视频| 久久免费成人精品视频| 欧美福利小视频| 4438全国亚洲精品在线观看视频| 91精品国产91久久久久久久久| 在线观看欧美成人| 九九九热精品免费视频观看网站| 久久亚洲一区二区三区四区五区高| 欧美午夜性色大片在线观看| 日韩欧美亚洲综合| 国产精品黄页免费高清在线观看| 日韩电影免费观看在线| 国产精品丝袜白浆摸在线| 国产精品久久久久久久9999| 欧美电影电视剧在线观看| 欧洲亚洲免费在线| 日韩中文视频免费在线观看| 91精品国产综合久久香蕉最新版| 免费不卡欧美自拍视频| 国产极品jizzhd欧美| 欧洲成人性视频| 国产日韩在线看| 亚洲美女av在线播放| 亚洲欧洲高清在线| 日韩精品免费电影| 国产精品国内视频| 高清一区二区三区日本久| 国产日韩欧美在线视频观看| 伊是香蕉大人久久| 欧美性xxxx极品hd满灌| 57pao国产精品一区| 国产亚洲欧美另类中文| 在线观看精品自拍私拍| 97在线精品国自产拍中文| 欧美在线国产精品| 久久久电影免费观看完整版| 亚洲精品乱码久久久久久金桔影视| 成人精品在线视频| 成人免费xxxxx在线观看| 亚洲国产精品系列| 久久青草精品视频免费观看| 最近2019年日本中文免费字幕| 亚洲精品99久久久久| 91精品久久久久久久久久入口| 日韩精品在线免费观看| 日韩久久免费电影| 久久久久女教师免费一区| 亚洲欧美制服第一页| 欧美激情视频在线| 久久久久久久91| 亚洲国产日韩欧美综合久久| 国产一区二区在线免费视频| 色婷婷综合久久久久|