/Diploma_NodeLib_python

Diploma Node Library service python 3.11

Primary LanguagePython

NodeLib

Назначение –

NodeLib – это Библиотека классов, предоставляющая классы для работы с графами (Graph, Node, Edge)

Описание принципа работы –

Принцип работы библиотеки прост – пользователь (программист, использующий библиотеку) пользуется предоставленными ему классами, а внутри себя экземпляр классов (объекты) фиксируют происходящие изменения и, при необходимости, формируют команду на изменение состояния графа. Команда помещается в специальную потокобезопасную очередь. Для каждого графа запускается обработчик очереди команд, изменения текущего графа. Обработчик работает в отдельном потоке, пока не активирован CancelationToken. Обработчик экономит ресурсы компьютера и работает только тогда, когда в очереди есть элементы. При вызове метода Dispose у графа активируется CancelationToken, и после обработки всей очереди команд очищаются ресурсы занимаемые графом.

Описание классов программы -

Graph – класс представляющий граф сам по себе, позволяет создавать, получать по id и удалять узлы текущего графа. Также именно класс Graph содержит в себе логику обработку очереди команд (команд изменения состояния графа)

Node – класс представляющий узел графа сам по себе, позволяет работать с узлами графа, изменять их свойства, создавать, получать, изменять и удалять рёбра графа (связи с другими узлами графа)

Edge – класс представляющий ребро графа само по себе, реализует связи между узлами графа, а также может хранить полезную информацию о самом ребре

CommandType – перечисление типов команд

Command - класс, представляющий команду, содержит уникальный идентификатор, тип команды (CommandType) и некоторый передаваемый объект-значение

RpcRequect – класс описывающий запрос к TranslationServer, содержит в себе информацию о команде и дополнительные данные

RpcResponse – класс описывающий ответ от TranslationServer

Пример использования класса Graph:

from GraphLibrary import Edge, Node, Graph
import asyncio


async def main():
    async with Graph(sender_endpoint="http://localhost:9090/") as graph:
        node = graph.create_node()


if __name__ == '__main__':
    asyncio.run(main())