Python插件机制实现详解


Posted in Python onMay 04, 2020

插件机制是代码/功能反向依赖注入到主体程序的一种方法,编译型语言通过动态加载动态库实现插件。对于Python这样的脚本语言,实现插件机制更简单。

机制

Python的__import__方法可以动态地加载Python文件,即以某个py脚本的文件名作为__import__的参数,在程序运行的时候加载py脚本程序模块。对应的import关键字则是静态加载依赖的py模块。

描述

__import__() 函数用于动态加载类和函数 。

如果一个模块经常变化就可以使用 __import__() 来动态载入。

语法

__import__ 语法:

__import__(name[, globals[, locals[, fromlist[, level]]]])

参数说明:

name -- 模块名

需要动态加载的py脚本若存放在任意的目录下,则需要首先需要增加脚本查找路径:

sys.path.append(modulePath)

应用示例

# 增加查找路径
sys.path.append(modulePath)
# 加载脚本
module = __import__(moduleName) 
# 保存脚本对象,否则会被析构    
self.modules[moduleName] = module
# 调用插件中的方法初始化
module.InitModule(self)

总结

使用插件机制可以实现高内聚低耦合的程序。

在实践中,我们处理的任务有若干的可执行程序配合完成,可执行程序可以是C++,.Net , Java,甚至其他脚本程序,这时候我们使用Python作为粘合剂,定义了主体的任务流程框架,使用插件机制动态的注入需要执行的任务。

另外当在不同的情况下,需要使用不同的exe配合的时候,我们只需要用json定义需要的exe组合,主程序不需要做任何的更改就可以满足变换的业务需求。

补充知识:Kusto使用python plugin

整个流程为kusto的数据进入python脚本时自动转化为pandas DataFrame,

python 脚本的输出自动转化为kusto table,其中列名和变量都保持不变。

Python 脚本紧接着Kusto的输出

Python插件机制实现详解

注意以下几点

1.typeof为python脚本输出的参数

2.typeof 中的数据类型跟python脚本输出pandas DataFrame列是完全一致的,包括变量名,变量类型,前后不一致的话会报错

3.typeof 中*表示复用输入的数据类型, 比如( *,age:int) 表示输入在输出的基础上多个了age属性

4. python脚本的输入是转化为DataFrame 的kusto table, 其在python脚本里的变量名为df(会自动匹配上), 同时我们要让输出的DataFrame 命名为result, 程序会自动输出

5. python 中可以接受外界参数,通过 kargs["topK"]这样的形式,kargs是系统默认的传递参数的变量, 同时kusto在python脚本的最后通过pack("topK", 10)这样的形式往python脚本中传递参数

Python插件机制实现详解

6 .python脚本可以直接写在kusto代码中,也可以以链接的形式访问

Python插件机制实现详解

7. kusto 中的python运行企业版的anaconda上,个人没法轻易安装自己想要的包,所以如果要使用某些包,最好是将其功能用最基本的包写好。kusto 运行镜像的沙盒支持 numpy ,pd, 以及tensorflow ,keras ,torch hdbscan, xgboost 这些比较大众的包

以上这篇Python插件机制实现详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python写的服务监控程序实例
Jan 31 Python
python实现定时播放mp3
Mar 29 Python
python实现的jpg格式图片修复代码
Apr 21 Python
python paramiko模块学习分享
Aug 23 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
Python进度条的制作代码实例
Aug 31 Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 Python
Python实现打乒乓小游戏
Sep 25 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 #Python
解决IDEA 的 plugins 搜不到任何的插件问题
May 04 #Python
python3 sleep 延时秒 毫秒实例
May 04 #Python
Python并发concurrent.futures和asyncio实例
May 04 #Python
Python 中由 yield 实现异步操作
May 04 #Python
python 双循环遍历list 变量判断代码
May 04 #Python
Python求解排列中的逆序数个数实例
May 03 #Python
You might like
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
[46:20]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第二场 1月22日
2021/03/11 DOTA
python 平衡二叉树实现代码示例
2018/07/07 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
Python中Selenium模块的使用详解
2020/10/09 Python
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
麦当劳辞职信范文
2014/01/18 职场文书
教师业务培训方案
2014/05/01 职场文书
小学班级口号
2014/06/09 职场文书
2014年征兵标语
2014/06/20 职场文书
师范学院毕业生求职信
2014/06/24 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
干部作风建设心得体会
2014/10/22 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript