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 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
对python append 与浅拷贝的实例讲解
May 04 Python
详解Python中的分组函数groupby和itertools)
Jul 11 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
解析python的局部变量和全局变量
Aug 15 Python
Python + Flask 实现简单的验证码系统
Oct 01 Python
python deque模块简单使用代码实例
Mar 12 Python
Python利用命名空间解析XML文档
Aug 10 Python
python通过函数名调用函数的几种场景
Sep 23 Python
python 绘制国旗的示例
Sep 27 Python
Python colormap库的安装和使用详情
Oct 06 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根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python自动扫雷实现方法
2015/07/25 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
py-charm延长试用期限实例
2019/12/22 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
linux面试题参考答案(7)
2012/10/29 面试题
农民入党思想汇报
2014/01/03 职场文书
社区安全检查制度
2014/02/03 职场文书
大学课外活动总结
2014/07/09 职场文书
淘宝客服工作职责
2014/07/11 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
党员身份证明材料
2015/06/19 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技