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批量生成任意尺寸的图片
Aug 29 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
Python多进程并发与多线程并发编程实例总结
Feb 08 Python
Python操作MySQL模拟银行转账
Mar 12 Python
pandas表连接 索引上的合并方法
Jun 08 Python
用python实现刷点击率的示例代码
Feb 21 Python
python中for循环变量作用域及用法详解
Nov 05 Python
Python 词典(Dict) 加载与保存示例
Dec 06 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 Python
python可视化之颜色映射详解
Sep 15 Python
Python学习之时间包使用教程详解
Mar 21 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 adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
JS高级运动实例分析
2016/12/20 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
国际花店:Pickup Flowers
2020/04/10 全球购物
为什么使用接口?
2014/08/13 面试题
平面设计自荐信
2013/10/07 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
工程材料采购方案
2014/05/18 职场文书
中学教师师德承诺书
2014/05/23 职场文书
设备售后服务承诺书
2014/05/30 职场文书
科技节口号
2014/06/19 职场文书
环境保护标语
2014/06/20 职场文书
先进个人申报材料
2014/12/30 职场文书
幽灵公主观后感
2015/06/09 职场文书