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实现扫描端口示例
Mar 29 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
scrapy爬虫完整实例
Jan 25 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
flask中的wtforms使用方法
Jul 21 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 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
实用函数10
2007/11/08 PHP
php中对2个数组相加的函数
2011/06/24 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
更正确的asp冒泡排序
2007/05/24 Javascript
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
Seajs的学习笔记
2014/03/04 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
Python单例模式实例分析
2015/01/14 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
项目资料员岗位职责
2013/12/10 职场文书
生日宴会答谢词
2014/01/09 职场文书
大学同学聚会邀请函
2014/01/29 职场文书
yy婚礼主持词
2014/03/14 职场文书
工作犯错保证书
2015/05/11 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android