Python中用于插件架构的多处理器或多线程



我正在尝试用Python实现插件体系结构。

我已经开始使用Threading模块编写它,其中每个插件都是一个线程,我使用Thread.start()方法调用它(因为所有插件都是BasePlugin的子类,Thread是子类)。然而,我刚刚遇到了multiprocessing模块。

我现在想知道我是否应该切换到multiprocessing模块,并使用共享内存/Pipes等共享数据…

我想听听别人对此的看法。

我一直在研究的插件架构如下:

事件由Plugin Manager接收。Plugin Manager检查所有订阅了该类型事件的插件。它激活它们并向它们发送事件对象(因为它包含附加信息)。如果其中一个插件已经处于活动状态,则无需派生它(只需将事件对象发送给它)。

此外,还有一些资源在任何时间点都只属于一个插件。每个插件都可以请求资源(我不担心任何竞争条件,因为不会有那么多插件同时活动)。

线程与主进程以及彼此共享内存。例如,您可以有一个对所有线程都可用的列表。附加到列表中的项目可以被其他线程看到。但你必须小心。您必须了解数据结构上的哪些操作是线程安全的,哪些不是。当两个线程检查字典中是否存在密钥,然后向其写入时,程序的行为会发生什么?

多个进程不共享内存。您启动的新进程会在产生内存的位置获得内存的副本。

线程使用较少的资源。但可能很难推理。另一方面,进程之间的通信很棘手。而且您不能只访问任意的Python数据结构。这听起来像是你想要能够做到的。

一个写得不好的插件,如果它在一个线程中,可能会导致整个程序崩溃。然而,如果是在一个单独的过程中,这就不会发生。也许这是一个考虑因素?

最新更新