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文件操作之目录遍历实例分析
May 20 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
详解如何设置Python环境变量?
May 13 Python
python的sorted用法详解
Jun 25 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
简单介绍python封装的基本知识
Aug 10 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 Python
pytorch 使用半精度模型部署的操作
May 24 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
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
PHP实现递归无限级分类
2015/10/22 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
python 生成不重复的随机数的代码
2011/05/15 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
巴西手表购物网站:eclock
2019/03/19 全球购物
大学生创业计划书的格式要求
2013/12/29 职场文书
安全生产汇报材料
2014/02/17 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
爱国主义主题班会
2015/08/14 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android