Python插件技术知识
2021/5/10 22:28:56
本文主要是介绍Python插件技术知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
背景概述
- 插件化机制使框架与各个模块的实现相解耦,模块统一抽象出基本数据结构与框架的交互接口,模块只要符合统一接口即可做到插件替换。
架构图
- PluginCore:通过Plugin Manager调用算法,负责业务逻辑的实现
- PluginManger: 通过读取配置文件,负责各种插件的加载、管理、甚至热更新
插件实现
import()函数
- 用于动态加载类和函数。如果一个模块经常变化就可以使用 import() 来动态载入
- 函数语法:
__import__(name, globals=None, locals=None, fromlist=(), level=0) name[必须]:模块名称 globals - 全局变量集合,默认为None locals - 局部变量集合,默认为None fromlist - 是否导入子模块,看上去是导入模块的列表。但实际是一个判断条件,只要设置为非空的值,且模块名称是带有子模块的,将导入子模块。例如:sys.path。当不设置时,返回sys,如果设置为非空值,则返回ntpath(path模块) level - 绝对或者相对导入
加载方式
- 直接引用加载【老版】
- Importlib包方式【新版】
算法插件服务
插件定义
- 每个插件需要实现公共数据接口和接口方法。
load_model(self, root_path, batch_size=1, devs=None): :模型加载入口 predict(self, req_dict={}): :推理算法入口 version(self): :版本方法
配置化管理
- 插件通过配置文件组织可选插件以及 插件名 、插件路径 等信息。
key:配置插件模块的名字 key: str, model_dir:配置插件内部方法名字 model_dir : str, infer_dir:配置插件具体加载路径(工程下绝对路径) infer_dir : str,
插件管理器
- 定义了插件管理的方法,插件功能加载、插件获取方法实现
_load_plugin(self, name, dir) :插件加载入口,识别配置加载插件 get_plugin(self, name): :插件获取接口,该方法获取插件
插件扩展
-
有些时候需要用解耦调用C代码,以linux平台为例说明python调用.so文件的使用方法
-
构建C语言插件
插件热加载
- Importlib.reload方法实现
插件优势
- 高可扩展:开发者可自由实现符合业务需求的模块插件,直接替换插件配置就可以实现业务扩展
- 发布灵活:插件可集中发布也可单独发布,配合插件生命周期管理甚至可以实现插件的单独更新
- 代码解耦:各个插件模块开发和部署都单独进行,能方便的扩展和自由实现符合业务需求的插件
微内核架构
- 微内核架构是插件架构模式的一种典型实现,常常把微内核架构也叫做插件式架构
- 当前微内核架构也被应用在许多我们熟知的产品,比如:操作系统、Chrome浏览器、Eclipse编辑器等
架构图
- 微内核架构包含两个组件:核心系统(core system)和插件模块(plug-in component)
- 核心系统只包含让系统可以运作的最小功能
- 插件模块,则包含一些特殊处理逻辑、额外的功能,用于提供更多的业务能力
That’s all!
这篇关于Python插件技术知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器