Тайм-аут функции HTTP Azure при запуске другой функции, но работает при прямом запуске.Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Тайм-аут функции HTTP Azure при запуске другой функции, но работает при прямом запуске.

Сообщение Гость »


У меня есть HTTP-функция Azure, время ожидания которой почти всегда истекает при вызове другой функции Azure, но всегда работает при прямом вызове. Дополнительная информация:

У меня есть две функции Azure на Python:
[*]функция, запускаемая по времени (запланированная) [*]функция, запускаемая HTTP
Функция, запускаемая по времени, извлекает список элементов, а затем вызывает функцию, запускаемую HTTP, для каждого из элементов, где элемент передается как строковый аргумент. Он использует запросы Python и URL-адрес функции, запускаемой http. Затем функция, запускаемая HTTP, выполняет некоторые вычисления, которые занимают 1–2 секунды.

Если запускается функция, запускаемая по времени, она пытается вызвать функцию, активируемую http, но в 95 % случаев время ожидания функции http истекает с 504.0 GatewayTimeout через 5 минут и ничего не возвращает. что приводит к истечению времени срабатывания функции, запускаемой по времени (поскольку прошло более 5 минут). Как ни странно, иногда кажется, что это работает, хотя параметры не менялись.

Если я вызываю функцию http напрямую через портал Azure или через python/curl, используя точно те же параметры (т. е. точно такой же строковый аргумент) и точно такой же URL-адрес функции всегда работает и возвращает значения через 1-2 секунды, что заставляет меня думать, что в моем коде нет ошибки, которая препятствует выполнению функции, а есть что-то еще.

Есть идеи, что может быть причиной этой проблемы и какие шаги я могу предпринять, чтобы попытаться ее исправить?

Изменить:

Функция срабатывания по времени (сокращенная):

импортировать дату и время журнал импорта импортировать azure.functions как func запросы на импорт импортировать ОС время импорта def main(mytimer: func.TimerRequest) -> Нет: utc_timestamp = ( datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat() ) items_without_data = ["предмет1", "предмет2"] cloud_function_url = os.environ.get("MY_CF_URL") для i, элемент в перечислении (items_without_data): г = запросы.пост( cloud_function_url, json = {"item_id": элемент}, тайм-аут = 300, ) если r.status_code != 200: регистрация.ошибка( f"Ошибка вызова облачной функции. {r.text}, для элемента {item}" ) # убедитесь, что мы не достигли предела скорости в 40 вызовов в минуту если я % 19 == 0: время.сон(60) Функция, запускаемая HTTP:
импортировать azure.functions как func журнал импорта импортировать JSON импортировать SomeOtherFunctionThatCallsAnExternalAPI def main(req: func.HttpRequest) -> func.HttpResponse: logging.info("CF обработал запрос.") item_id = req.params.get("item_id") если не item_id: пытаться: req_body = req.get_json() кроме ValueError: проходить еще: item_id = req_body.get("item_id") logging.info(f"Запрос элемента {item_id}") если не item_id: logging.error("Ошибка: отсутствует item_id") вернуть func.HttpResponse( «отсутствует обязательный параметр item_id», status_code=400 ) logging.info(f"Получение XXX для элемента {item_id}") IDD = SomeOtherFunctionThatCallsAnExternalAPI() данные_ответа, ошибка = IDD.get_xxx( item_id=item_id, write_to_db=True ) если не ответ_данные: logging.error(f"Ошибка: {ошибка}") вернуть func.HttpResponse (ошибка, status_code = 500) logging.info(f"Обработанный запрос для элемента {item_id}") вернуть func.HttpResponse( json.dumps(response_data), mimetype="application/json", status_code=200 )
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»