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实现在windows下操作word的方法
Apr 28 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
python写一个md5解密器示例
Feb 23 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
windows下numpy下载与安装图文教程
Apr 02 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
Django中的模型类设计及展示示例详解
May 29 Python
Python暴力破解Mysql数据的示例
Nov 09 Python
python爬虫中抓取指数的实例讲解
Dec 01 Python
python中的被动信息搜集
Apr 29 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
无线电的诞生过程
2021/03/01 无线电
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
试用php中oci8扩展
2015/06/18 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
python实现自动化上线脚本的示例
2019/07/01 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
python实现操作文件(文件夹)
2019/10/31 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
python实现简单井字棋小游戏
2020/03/05 Python
Python多线程threading创建及使用方法解析
2020/06/17 Python
Django websocket原理及功能实现代码
2020/11/14 Python
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
机关节能减排实施方案
2014/03/17 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书