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 相关文章推荐
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
python实现websocket的客户端压力测试
Jun 25 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
在VS2017中用C#调用python脚本的实现
Jul 31 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
Python super()方法原理详解
Mar 31 Python
python打开文件的方式有哪些
Jun 29 Python
如何真正的了解python装饰器
Aug 14 Python
Pyhton爬虫知识之正则表达式详解
Apr 01 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
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
详解Vue中组件的缓存
2019/04/20 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Python中装饰器学习总结
2018/02/10 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
python pillow模块使用方法详解
2019/08/30 Python
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
Java基础面试题
2012/11/02 面试题
减负增效提质方案
2014/05/23 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
同学聚会通知书
2015/04/20 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技