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绘制科赫雪花
Jun 22 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
解决Django连接db遇到的问题
Aug 29 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
Django集成celery发送异步邮件实例
Dec 17 Python
pytorch 实现查看网络中的参数
Jan 06 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 Python
详解python中的异常捕获
Dec 15 Python
安装不同版本的tensorflow与models方法实现
Feb 20 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获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
extjs form textfield的隐藏方法
2008/12/29 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
Python迭代用法实例教程
2014/09/08 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
使用Python写CUDA程序的方法
2017/03/27 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
Python利用命名空间解析XML文档
2020/08/10 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
目标责任书格式范文
2015/05/11 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python
python基于tkinter制作下班倒计时工具
2021/04/28 Python
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android