Архитектура плагинов - Менеджер плагинов и проверка импорта плагинов *

Я в настоящее время пишу приложение, которое позволяет пользователю расширить его с помощью 'плагин архитектура типа. Они могут писать дополнительные классы Python на основе предоставленного мною объекта BaseClass, и они загружаются против различных сигналов приложения. Точное количество и имена классов, загружаемых как плагины, неизвестны до запуска приложения, но загружаются только один раз при запуске.

Во время моего исследования наилучшего способа решения этой проблемы яМы придумали два общих решения.

Вариант 1 - Бросьте свои собственные, используя imp, pkgutil и т. Д.

Смотрите, например,этот ответ или жеэтот.

Вариант 2 - использовать библиотеку менеджера плагинов

Случайно выбирая пару

straight.pluginyapsyэтот подход

Мой вопрос - при условии, что приложение должно быть перезапущено, чтобы загрузить новые плагины - есть ли какое-либо преимущество вышеуказанных методов над чем-то вдохновленнымэтот так ответ а такжеэтот такие как:

import inspect
import sys
import my_plugins

def predicate(c):
    # filter to classes
    return inspect.isclass(c)

def load_plugins():
    for name, obj in inspect.getmembers(sys.modules['my_plugins'], predicate):
        obj.register_signals()

Есть ли недостатки этого подхода по сравнению с вышеупомянутыми? (кроме всех плагинов должны быть в одном файле) Спасибо!

РЕДАКТИРОВАТЬ

Комментарии запрашивают дополнительную информацию ... единственное, что я могу добавить, это то, что плагины используютшоры библиотека для предоставления сигналов, на которые они подписаны. Каждый плагин может подписываться на разные сигналы разных типов и, следовательно, должен иметь свою спецификурегистр" метод.

Ответы на вопрос(3)

Ваш ответ на вопрос