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 相关文章推荐
qpython3 读取安卓lastpass Cookies
Jun 19 Python
pandas中Timestamp类用法详解
Dec 11 Python
20个常用Python运维库和模块
Feb 12 Python
python看某个模块的版本方法
Oct 16 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
创建Shapefile文件并写入数据的例子
Nov 26 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
python中导入 train_test_split提示错误的解决
Jun 19 Python
python和C++共享内存传输图像的示例
Oct 27 Python
Python环境搭建过程从安装到Hello World
Feb 05 Python
分位数回归模型quantile regeression应用详解及示例教程
Nov 02 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下使用以下代码连接并测试
2008/04/09 PHP
simplehtmldom Doc api帮助文档
2012/03/26 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP微信支付开发实例
2016/06/22 PHP
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
使用python实现省市三级菜单效果
2016/01/20 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
台湾最大网路书店:博客来
2018/03/18 全球购物
如何强制垃圾回收
2015/10/06 面试题
关于是否需要写商业计划书
2014/02/07 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
旅游市场营销方案
2014/03/09 职场文书
《花木兰》教学反思
2014/04/09 职场文书
劳动竞赛口号
2014/06/16 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
婚前财产协议书范本
2014/10/19 职场文书
卫生主题班会
2015/08/14 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
导游词之神仙居景区
2019/11/15 职场文书