相关疑难解决方法(0)

在Python中构建最小的插件架构

我有一个用Python编写的应用程序,由相当技术的读者(科学家)使用.

我正在寻找一种让用户可以扩展应用程序的好方法,即脚本/插件架构.

我正在寻找非常轻量级的东西.大多数脚本或插件不会由第三方开发和分发并安装,但会在几分钟内被用户掀起,以自动执行重复任务,添加对文件格式的支持,所以插件应该具有绝对最小的样板代码,并且除了复制到文件夹之外不需要"安装"(因此像setuptools入口点或者Zope插件架构似乎太多了.)

是否有任何这样的系统,或任何实施类似计划的项目,我应该考虑一下想法/灵感?

python architecture plugins

182
推荐指数
8
解决办法
8万
查看次数

python中的插件管理器

我对python相对较新(已经做了一些1h脚本,比如一个小小的网络服务器或本地网络聊天),并想在其中编写一个插件管理器.我的想法是,有一个插件接口,具有以下功能:

getDependencies -> all dependencies of the plugin to other plugins
getFunctions -> all functions that this plugin introduces
initialize -> a function that is called when loading the plugin
Run Code Online (Sandbox Code Playgroud)

(我可以想象在依赖关系上有一个拓扑排序算法来决定插件初始化的顺序.)

我想实现多线程,这意味着每个插件都在自己的线程中运行,该线程有一个可以串行执行的函数调用工作队列.当一个插件调用另一个插件的函数时,它会调用管理器,而管理器又会将函数调用插入到另一个插件的队列中.

此外,管理者应该提供某种事件系统,其中插件可以注册他们自己的事件并成为其他人的事件的听众.

此外,我希望能够在代码更改或其线程崩溃时重新加载插件,而无需关闭管理器/应用程序.我已经阅读了如何卸载(重新加载)Python模块?与此同时.

再次说清楚:管理员不应该提供任何其他功能,而不是支持其插件与彼此之间的通用通信接口,并行运行的能力(以多线程方式,而不需要插件知道这一点)并恢复更新/崩溃的插件.

所以我的问题是:是否可以在python中执行此操作?如果是,那么粗略草图中是否存在设计错误?我很感激对此有任何好的建议.

其他"文献": 用Python实现插件系统

python plugins

2
推荐指数
1
解决办法
2345
查看次数

标签 统计

plugins ×2

python ×2

architecture ×1