Python pluggy模块如何使用


本篇内容介绍了“Pythonpluggy模块如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!pluggy 作用:提供了一个简易便捷的插件系统,可以做到插件与主题功能松耦合pluggy 是pytest,tox,devpi的核心框架执行如下命令即可执行结果如下:inside Plugin_2.myhook()
inside Plugin_1.myhook()
[-1, 3]从代码上看比较绕,其实通俗一点理解,其实挺简单的,可以理解为首先定义一个接口类,然后定义很多插件类,插件类想要多少就定义多少, 接口类中要定义接口,上面的例子值定义了一个接口,其实可以定义很多接口,在每个插件类中需要选择接口类中的接口去实现,当然也不需要每个 都需要去实现,可以根据自己的需要有选择的去实现。举个例子:比如定义了一个接口类,接口类中定义了10个接口,同时定义了3个类,这三个类分别实现了接口类中3个接口,6个接口和10个接口,然后实例化一个插件管理的对象,实例化对象将接口类加入定义模板中,然后去注册这三个类,注册之后,就可以通过插件管理对象的钩子去调用接口类中的每个方法了,比如调用头三个方法,因为每个插件中都实现了,所以就会有三个结果,调用后面4-6的接口时,因为只有两个插件实现了,所以只会有两个结果返回,调用7-10的接口因为只有一个插件类实现了,所以就会只有一个结果返回,这样插件使用起来就非常灵活,可以真正做到“热插拔”下面用代码示例演示:执行结果如下:inside Plugin_2.myhook1()
inside Plugin_1.myhook1()
[-1, 3]
inside Plugin_2.myhook2()
inside Plugin_1.myhook2()
[-2, 4]
inside Plugin_2.myhook3()
[-3]
inside Plugin_1.myhook4()
[5]从上面的代码示例可以看出:1)myhook1 和 myhook2 因为两个插件都实现了,所有返回两个结果,而且是倒序的2)myhook3 因为只有插件2实现了,所以只有一个返回结果3)myhook4 在spec中未定义,这里却也有结果,目前理解可能是pluggy的bug,待后续看源码后解释当传入firstresult=True时,获取第一个plugin执行结果后就停止继续执行执行结果如下:inside Plugin_2.myhook()
-1常用的有tryfirst和trylast以及hookwrapper当传入tryfirst=True时,表示这个类的hook函数会优先执行,其他的仍然按照后进先出的顺序执行执行结果让如下:inside Plugin_1.myhook()
inside Plugin_3.myhook()
inside Plugin_2.myhook()
[3, 9, -1]当传入trylast=True,表示当前插件的hook函数会尽可能晚的执行,其他的仍然按照后进先出的顺序执行执行结果如下:inside Plugin_3.myhook()
inside Plugin_1.myhook()
inside Plugin_2.myhook()
[9, 3, -1]当传入hookwrapper=True时,需要在这个plugin中实现一个yield,plugin先执行yield之前的代码,然后去执行其他的pluggin,然后再回来执行yield之后的代码,同时通过yield可以 获取到其他插件执行的结果执行结果如下:inside Plugin_2.myhook() before yield…
inside Plugin_3.myhook()
inside Plugin_1.myhook()
[9, 3]
inside Plugin_2.myhook() after yield…
[9, 3]“Pythonpluggy模块如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质免费云主机域名量的实用文章!

相关推荐: html5中preload的概念是什么

本篇内容介绍了“html5中preload的概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 在html5中,preload是“预加载”的意思,是用于规…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/03 11:03
下一篇 05/03 11:03

相关推荐