stevedore简介
来源:互联网 发布:淘宝部分退款在哪 编辑:程序博客网 时间:2024/06/05 17:28
本博客欢迎转发,但请保留原作者信息!
新浪微博:@孔令贤HW;
博客地址:http://blog.csdn.net/lynn_kong
stevedore基于setuptools entry point(http://packages.python.org/distribute/pkg_resources.html#convenience-api),提供python应用程序管理插件的功能。
一、插件的几种使用方式
1、Drivers – Single Name, Single Entry Point
即一种插件对应一种外部资源(数据库,设备或远程应用程序),同一类资源可能有很多不同的插件,使用时对于某一个特定的资源只能选择其中一种。
使用示例:
SQLAlchemy(http://sqlalchemy.org/)
libcloud(http://libcloud.apache.org/)
2、Hooks – Single Name, Many Entry Points
这种使用的方式,类似于,一个应用程序触发了一个事件,需要不同的程序进行处理,同一个namespace中,不同的entrypoint可以使用相同的名称。
使用示例:
Emacs mode hook functions(http://www.gnu.org/software/emacs/manual/html_node/emacs/Hooks.html)
Django signals(https://docs.djangoproject.com/en/dev/topics/signals/)
3、Extensions – Many Names, Many Entry Points
一种更加通用的使用方式。
二、stevedore中的类
1、Extension(name, entry_point, plugin, obj)
表示一个entry point,所有传递的参数都作为对象的属性。
name: entry point的名称;
entry_point: 从pkg_resources获得的表示entrypoint的EntryPoint对象;
plugin: entry_point.load()返回的类;
obj: extension被加载时会触发plugin(*args, **kwds),创建一个plugin的实例;
2、ExtensionManager(namespace, invoke_on_load=False, invoke_args=(),invoke_kwds={}, propagate_map_exceptions=False)
其他所有manager的基类,参数说明:
namespace (str) –entry points的命名空间.
invoke_on_load (bool) – 是否自动加载extension.
invoke_args (tuple) – 自动加载extension时向实例传递的参数1.
invoke_kwds (dict) – 自动加载extension实例时传递的参数2.
propagate_map_exceptions – 使用map调用时,是否向上传递异常信息.
方法:
map(func, *args, **kwds)
对每一个extension触发func调用,func的写法:
def func(ext, *args, **kwds):
pass
names()
返回extension的名称列表
3、EnabledExtensionManager(namespace, check_func, invoke_on_load=False,invoke_args=(), invoke_kwds={}, propagate_map_exceptions=False)
继承自ExtensionManager,只加载通过check_func校验的extension
4、DispatchExtensionManager(namespace, check_func,invoke_on_load=False, invoke_args=(), invoke_kwds={},propagate_map_exceptions=False)
继承自EnabledExtensionManager,扩展了map函数
map(filter_func, func, *args, **kwds)
filter_func与func写法一样,只有通过filter_func的extension,才执行func调用。
5、NameDispatchExtensionManager(namespace, check_func,invoke_on_load=False, invoke_args=(), invoke_kwds={},propagate_map_exceptions=False)
继承自DispatchExtensionManager,修改了map函数
map(names, func, *args, **kwds)
只有名称在names中的extension,才执行func调用。
6、NamedExtensionManager (namespace, names, invoke_on_load=False,invoke_args=(), invoke_kwds={}, name_order=False,propagate_map_exceptions=False)
继承自ExtensionManager,只加载名称在names内的extension。
7、HookManager(namespace, name, invoke_on_load=False, invoke_args=(),invoke_kwds={})
继承自NamedExtensionManager,加载相同的名称的extensions
8、DriverManager(namespace, name, invoke_on_load=False, invoke_args=(),invoke_kwds={})
继承自NamedExtensionManager,加载名称等于name的一个extension。
__call__(func, *args, **kwds)
driver:返回driver对象
关系图:
- stevedore简介
- stevedore简介
- Python深入:stevedore简介
- Python深入:stevedore简介
- stevedore
- OpenStack基础之stevedore
- 学习python动态扩展包stevedore
- Openstack : 16、Openstack-开发基础 stevedore学习
- Stevedore - (Dynamic Code Patterns: Extending Your Applications with Plugins)
- OpenStack公共组件oslo之十六——stevedore
- 简介
- 简介
- 简介
- 简介
- 简介
- 简介
- 简介
- 简介
- 字符拆分 邮箱
- 简单的两句话 轻松搞定tableview的高度自适应
- Android7.0 编译系统流程分析
- 如何在一台windows主机上搭建mysql主从配置
- https是如何工作的?
- stevedore简介
- maven学习(2)
- Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析
- 30岁从新开始
- 职场人士如何减压-有效减压六大方法
- lambda表达式:
- ios中记录用户登录,第二次免登录
- Android使用rotate实现图片旋转效果
- 【Python】python IDE pystorm