Python插件機(jī)制實(shí)現(xiàn)詳解
插件機(jī)制是代碼/功能反向依賴注入到主體程序的一種方法,編譯型語言通過動態(tài)加載動態(tài)庫實(shí)現(xiàn)插件。對于Python這樣的腳本語言,實(shí)現(xiàn)插件機(jī)制更簡單。
機(jī)制
Python的__import__方法可以動態(tài)地加載Python文件,即以某個(gè)py腳本的文件名作為__import__的參數(shù),在程序運(yùn)行的時(shí)候加載py腳本程序模塊。對應(yīng)的import關(guān)鍵字則是靜態(tài)加載依賴的py模塊。
描述
__import__() 函數(shù)用于動態(tài)加載類和函數(shù) 。
如果一個(gè)模塊經(jīng)常變化就可以使用 __import__() 來動態(tài)載入。
語法
__import__ 語法:
__import__(name[, globals[, locals[, fromlist[, level]]]])
參數(shù)說明:
name -- 模塊名
需要動態(tài)加載的py腳本若存放在任意的目錄下,則需要首先需要增加腳本查找路徑:
sys.path.append(modulePath)
應(yīng)用示例
# 增加查找路徑sys.path.append(modulePath)# 加載腳本module = __import__(moduleName) # 保存腳本對象,否則會被析構(gòu) self.modules[moduleName] = module# 調(diào)用插件中的方法初始化module.InitModule(self)
總結(jié)
使用插件機(jī)制可以實(shí)現(xiàn)高內(nèi)聚低耦合的程序。
在實(shí)踐中,我們處理的任務(wù)有若干的可執(zhí)行程序配合完成,可執(zhí)行程序可以是C++,.Net , Java,甚至其他腳本程序,這時(shí)候我們使用Python作為粘合劑,定義了主體的任務(wù)流程框架,使用插件機(jī)制動態(tài)的注入需要執(zhí)行的任務(wù)。
另外當(dāng)在不同的情況下,需要使用不同的exe配合的時(shí)候,我們只需要用json定義需要的exe組合,主程序不需要做任何的更改就可以滿足變換的業(yè)務(wù)需求。
補(bǔ)充知識:Kusto使用python plugin
整個(gè)流程為kusto的數(shù)據(jù)進(jìn)入python腳本時(shí)自動轉(zhuǎn)化為pandas DataFrame,
python 腳本的輸出自動轉(zhuǎn)化為kusto table,其中列名和變量都保持不變。
Python 腳本緊接著Kusto的輸出

注意以下幾點(diǎn)
1.typeof為python腳本輸出的參數(shù)
2.typeof 中的數(shù)據(jù)類型跟python腳本輸出pandas DataFrame列是完全一致的,包括變量名,變量類型,前后不一致的話會報(bào)錯(cuò)
3.typeof 中*表示復(fù)用輸入的數(shù)據(jù)類型, 比如( *,age:int) 表示輸入在輸出的基礎(chǔ)上多個(gè)了age屬性
4. python腳本的輸入是轉(zhuǎn)化為DataFrame 的kusto table, 其在python腳本里的變量名為df(會自動匹配上), 同時(shí)我們要讓輸出的DataFrame 命名為result, 程序會自動輸出
5. python 中可以接受外界參數(shù),通過 kargs['topK']這樣的形式,kargs是系統(tǒng)默認(rèn)的傳遞參數(shù)的變量, 同時(shí)kusto在python腳本的最后通過pack('topK', 10)這樣的形式往python腳本中傳遞參數(shù)

6 .python腳本可以直接寫在kusto代碼中,也可以以鏈接的形式訪問

7. kusto 中的python運(yùn)行企業(yè)版的anaconda上,個(gè)人沒法輕易安裝自己想要的包,所以如果要使用某些包,最好是將其功能用最基本的包寫好。kusto 運(yùn)行鏡像的沙盒支持 numpy ,pd, 以及tensorflow ,keras ,torch hdbscan, xgboost 這些比較大眾的包
以上這篇Python插件機(jī)制實(shí)現(xiàn)詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. JavaScript實(shí)現(xiàn)留言板實(shí)戰(zhàn)案例2. vscode運(yùn)行php報(bào)錯(cuò)php?not?found解決辦法3. 如何在python中執(zhí)行另一個(gè)py文件4. Python基于requests庫爬取網(wǎng)站信息5. 如何從Python的cmd中獲得.py文件參數(shù)6. 資深程序員:給Python軟件開發(fā)測試的25個(gè)忠告!7. 使用Blazor框架實(shí)現(xiàn)在前端瀏覽器中導(dǎo)入和導(dǎo)出Excel8. python中文本字符處理的簡單方法記錄9. ASP基礎(chǔ)知識Command對象講解10. Python-openpyxl表格讀取寫入的案例詳解

網(wǎng)公網(wǎng)安備