Задача следующая:
Есть система которая слушает команды в консоли к примеру. Пользователь вводит команду, она выполняет на основе ее функций.
Также система может обращаться к другим источникам и выполнять действия аля "ассистент" или "автоматизатор", называйте как хотите, это все равно привожу пример.
Необходимо расширять функционал без вмешательства пользователя. Написал пакет где слушатель, обработчик и модуль, залил системе, она проверяет на работоспособность и стандарты, проверяет на клоне системы с тестовыми данными, если все ок, у пользователя появляется новая команда или новый источник для обработки данных. Если не Ок пользователя ударяют током (шутка 😃)
Решение у меня следующее.
Есть два потока:
- канал связи (прием команд от пользователя)
- стартер слушателей
Канал связи я думаю всем понятно, обычный инпут и далее обработчик команд. Тут думаю все просто.
Стартер слушателей читает конфигурации системы, запускает в новые потоки слушателей с заданными параметрами (скорость обработки, вариативность и т.п.)
Слушатель в свою очередь обращается к источникам где получает данные и передает в обработчик типов. Здесь происходит сортировка данных между обработчиками. Обработчики химичат над данными и отправляют в модули, те в свою очередь совершают полезные надобности.
Когда прилетает новое расширение функционала, после его проверки, система распределяет по своим местам каждый элемент.
Listenets - Слушатель <class>
Handlers - Обработчики <class>
Modules - Модули <def>
TypeData.json <— DataType <str>
Далее, стоит задача разобраться в связях с этим новым функциями. Думаю решить так, перезаписать файлы, добавив в конце необходимые функции и импортировать зависимости с помощью меток и далее перезапустить потоки.
Как бы вы решили такую задачу? 🤔 Я понимаю, что тут по большей части относится к оптимизации архитектуры операционных систем, но я их не изучал, поэтому решаю как могу
Или вариант 2
Создать импорт импортов
т.е.
[
imports.py]
from funct1 import *
from funct2 import *
...
from functN import *
В самом начале это будет все импортировано в главный стартер который запускает функции как пример, не знаю:
import imports
funStart()
funGet()
funTagil()
И новые функции будут добавлять в обработчик в конец файла строки новых функций
funNewFuct()
и в импорты
from NewFuct import *
А далее снова перезапуск потока