Дополнительный Метод GET /api/v1/get_task/long_polling

Дополнительный метод get_task/long_polling предназначен для «подписки» на задачи для указанного коннектора (id_connnector) (чтобы не обращаться к DCC в цикле, ожидая для себя задачи.

Позволяет по указанному таймауту дожидаться появления задачи для себя, с тем, чтобы уже «что-то» с задачей делать.

Механика работы:

  1. при создании задачи создается очередь и добавляется задача в очередь

  2. Очередь находится в словаре Dict[str:queue]

  3. Клиент который слушает /get_task_status получает информацию о задаче сразу

  4. При запуске приложения в очередь попадают все задачи со статусом None

Пример:

# --------------------------------------------------------------------- # Long polling — долгое ожидание задачи от сервера # Сервер держит соединение, пока не появятся данные или не истечёт таймаут # --------------------------------------------------------------------- async def get_task_long_polling(id_connector: str, timeout: int): # Параметры запроса params = { "id_connector": id_connector, "timeout": timeout } # GET-запрос response = await async_client.get( f"{api_prefix}/get_task/long_polling", params=params ) # Если HTTP-статус плохой — сразу исключение response.raise_for_status() # Если сервер вернул пустой ответ — данных нет if not response.text or response.text.strip() == "": return None # Парсим JSON-ответ data = response.json() # Ожидаем, что сервер вернёт словарь if isinstance(data, dict): return data