Где искать причину лимита масштабируемости Python функции в Azure Functions?

Есть код на Python, который работает с OpenCV библиотекой. Решил попробовать разместить его на Azure Functions, чтобы иметь возможность запускать вычисления параллельно.

Загрузил код в Function App (Consumption plan/Free trial subscription) и сделал несколько тестовых запусков по 2,4,8,16 вызовов одновременно.
Код функции выполняется (судя по логам) ~15 секунд, результаты запусков были такими:
2 запроса - ~30 сек.
4 запроса - ~32 сек.
8 запросов - ~35 сек.
16 запросов - ~60 сек.

Вот выдержка из логов одного из запусков (старт функции и выполнение первой команды разнесены на 50 секунд):
2020-08-28 08:05:48.335 Executing 'Functions.FuncName' (Reason='This function was programmatically called via the host APIs.', Id=6ce3ec9b-6b32-4ec1-80e8-533124fa28bd)
2020-08-28 08:06:37.698 Python HTTP trigger function processed a request.


Входная функция в коде помечена как async:
async def main(req: func.HttpRequest) -> func.HttpResponse:
    return func.HttpResponse(await do_work(req))


Я читал документацию и все, что я нашел это:
  • A single function app only scales out to a maximum of 200 instances. A single instance may process more than one message or request at a time though, so there isn't a set limit on number of concurrent executions. You can specify a lower maximum to throttle scale as required.
  • For HTTP triggers, new instances are allocated, at most, once per second.

, что не очень-то вяжется с результатами запусков.

Собственно вопросы:
1. Почему параллельный запуск 2 функций выполняется по времени примерно столько же сколько и последовательный?
2. Почему параллельный запуск более 8 функций начинает задерживать выполнение?
3. Где-нибудь есть настройки масштабируемости?
4. Может быть использование Azure Functions для Python+OpenCV - не самая лучшая идея? Где еще можно развернуть такую функцию, чтобы иметь возможность параллельного запуска вычислений?
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Собственно вопросы:


смотри, если ты заменишь твои функции на парсинг УРЛов, желательно разных (чтобы с той стороны сервер не локнул), ты увидишь 500-100 без труда

а без труда - и рыбку из пруда

трудиться же ты не хочешь и призываешь экстраСЕКСов, в расчете что они пережуют то что ты не усвоил в мануалах и SICP

например,
Почему параллельный запуск более 8 функций начинает задерживать выполнение?

зная что OCV это прежде всего ПРОЦЕССОР, ты надеешься нашить шапочек простым изменением числа 2-32

или
Почему параллельный запуск 2 функций выполняется по времени примерно столько же сколько и последовательный?
не помнимаешь как создается поток и выделяются ресурсы
ну и и.п.

коротко - лучший путь к OCV - это только и только multiprocessing
хз что у тебя за задачи - возможно, можно всунуть по 8 на ядро
й запуск более 8 функций начинает задерживать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы