Схемы¶
Background-схема связей фреймворка¶
sequenceDiagram
autonumber
Participant QueueTasks
Participant Starter
Participant Worker
Participant Broker
Participant Storage
Participant GlobalConfig
QueueTasks->>Starter: (Перенос логики)
Starter->>Worker: Запуск
Starter->>Broker: Запуск
Broker<<->>Storage: Запуск и остановка
Storage<<->>GlobalConfig: Запуск и остановка
На этой диаграмме показано связь компонентов.
Обработка задачи сервером¶
sequenceDiagram
autonumber
Participant Storage
Participant Broker
Participant Worker
Participant TaskExecutor
Broker->>Storage: Новая задача
Broker->>Worker: Задача
Worker<<->>TaskExecutor: Выполнение задачи
Worker->>Storage: Результат
Этапы:
- Сначала задача сохраняется в Хранилище
- Затем задача отправляется в основную очередь Воркеров, и свободный Воркер(сабворкер) получает и работает с ней
- Воркер работает с функцией задачи через TaskExecutor и получает от него результат
- Результат сохраняется в Хранилище
Создание задачи клиентом¶
sequenceDiagram
autonumber
Participant (A)syncTask.add_task()
Participant QueueTasks.add_task()
Participant Broker
(A)syncTask.add_task()->>QueueTasks.add_task(): (Перенос логики)
QueueTasks.add_task()->>Broker: Новая задача
Этапы:
- Если используется (A)syncTask.add_task(), то он переносит данные на QueueTasks.add_task()
- Отправляет новую задачу Брокеру(а точнее его серверу)
Получение задачи клиентом¶
sequenceDiagram
autonumber
Participant (A)syncTask.add_task()
Participant (A)syncResult.result()
Participant QueueTasks.get()
Participant Storage
(A)syncTask.add_task()->>(A)syncResult.result(): (Перенос логики)
(A)syncResult.result()->>QueueTasks.get(): Запрос результата
QueueTasks.get()<<->>Storage: Получение результата
QueueTasks.get()->>(A)syncResult.result(): Возврат результата
Этапы:
- Если используется (A)syncTask.add_task(), то он переносит данные на (A)syncResult.result()
- Запрашиваем результат через связное ядро, в котором есть Хранилище
- Получаем от Хранилища данные
- Возвращаем результат