Дополнительный Метод GET /api/v1/get_task/long_polling
Дополнительный метод get_task/long_polling предназначен для «подписки» на задачи для указанного коннектора (id_connnector) (чтобы не обращаться к DCC в цикле, ожидая для себя задачи.
Позволяет по указанному таймауту дожидаться появления задачи для себя, с тем, чтобы уже «что-то» с задачей делать.
Механика работы:
при создании задачи создается очередь и добавляется задача в очередь
Очередь находится в словаре Dict[str:queue]
Клиент который слушает /get_task_status получает информацию о задаче сразу
При запуске приложения в очередь попадают все задачи со статусом 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