stevedore学习小结

0 背景

openstack组件动态批量加载组件时会用到stevedore,stevedore可以批量加载插件,看了下源码总结了下使用方法和原理

1 原理

stevedore加载插件一般返回一个对象,对象初始化过程进行插件加载,目前用到的类有:ExtensionManager、DriverManager,namedExtensionManager

加载原理为实例初始化时传入参数,实例初始化会按照参数找到参数对应插件,具体实现是类方法list_entry_points(self),该方法将初始化入参对应的entrypoint加载。加载的主要功能由pkg_resources.iter_entry_points(self,namespace)实现

1.1 pkg_resources.iter_entry_points流程

该方法为实例方法,实例的类为pkg_resources.WorkingSet

1.1 初始化

初始化中加载了sys.path目录下所有以.egg-info, .dist-info结尾的模块,每个模块为一个实例,例如加载的/usr/lib/python/site-packages/kafka.egg-info对应的实例以字典形式储存在实例属性self.by_key中,可这样获取 self.by_key['/usr/lib/python/site-packages/kafka.egg-info']

1.2 iter_entry_points

该方法实际遍历实例WorkingSet的实例属性self.by_key,调用self.by_key中存储的对象的get_entry_map(group)方法获取传入endpoint对应的插件

2 思考

2.1 实际环境中,例如传入的endpoint为ceilometer.notification,返回的插件的定义在ceilometer-9.0.7.egg-info中,ceilometer与ceilometer-9.0.7.eeg-info的对应关系是怎样建立的?

对模块名解析,按-分割模块名,如ceilometer-9.0.7.egg-info对应的就是ceilometer

3 使用

ExtensionManager加载一个namespace下所有插件

DriverManager提供namespace和name,加载namespace下名为name的插件

namedextensionmanager,提供namespace和names,加载namespace下载names中的插件

相关推荐

  1. stevedore学习小结

    2024-03-26 12:06:04       34 阅读
  2. 机器学习小结

    2024-03-26 12:06:04       55 阅读
  3. CSS学习小结

    2024-03-26 12:06:04       36 阅读
  4. swift学习小结

    2024-03-26 12:06:04       42 阅读
  5. oslo_policy学习小结

    2024-03-26 12:06:04       35 阅读
  6. oslo_rootwrap学习小结

    2024-03-26 12:06:04       29 阅读
  7. 《深度学习的数学基础》小结

    2024-03-26 12:06:04       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 12:06:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 12:06:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 12:06:04       82 阅读
  4. Python语言-面向对象

    2024-03-26 12:06:04       91 阅读

热门阅读

  1. K8S的mountPath和subPath

    2024-03-26 12:06:04       40 阅读
  2. Docker安装Git

    2024-03-26 12:06:04       34 阅读
  3. c# 定义泛型

    2024-03-26 12:06:04       38 阅读
  4. 装配平台在机械装备行业中扮演什么样的角色

    2024-03-26 12:06:04       40 阅读
  5. 第一章 计算机网络概述习题(计算篇)

    2024-03-26 12:06:04       25 阅读
  6. leetcode 343.整数拆分

    2024-03-26 12:06:04       42 阅读
  7. kali MSF网络安全框架

    2024-03-26 12:06:04       48 阅读
  8. C++多态

    C++多态

    2024-03-26 12:06:04      41 阅读
  9. 【阅读笔记】《硬笔书法艺术》

    2024-03-26 12:06:04       40 阅读
  10. sqlite3的安装

    2024-03-26 12:06:04       44 阅读
  11. mac m1安装和使用nvm的问题

    2024-03-26 12:06:04       43 阅读
  12. MYSql通过FULLTEXT实现全文检索

    2024-03-26 12:06:04       38 阅读
  13. 本地远程访问Linux服务器上的jupyter notebook

    2024-03-26 12:06:04       42 阅读
  14. 大模型的模型参数为什么这么多

    2024-03-26 12:06:04       40 阅读
  15. C++/C# 数据类型结构间

    2024-03-26 12:06:04       44 阅读
  16. swift学习小结

    2024-03-26 12:06:04       42 阅读