Приведенный ниже скрипт имеет скорее теоретический нежели практический интерес.
Итак, постановка задачи:
- Есть скрипт получения некоего набора данных (JSON).
- Требуется на основе этого набора данных циклически вызывать асинхронный запрос, который выполняет действия на основе входных данных от первого скрипта.
- При этом требуется лимитировать число одновременно запущенных асинхронных процессов (чтобы не порождать десятки или даже сотни запросов сразу).
Алгоритм решения:
- Получить JSON с данными для последующей обработки.
- Для каждого элемента в полученных данных:
- — Если пул не заполнен – запустить асинхронный процесс.
- — Если пул заполнен – ждать пока в пуле освободится слот.
- По окончанию обработки данных очистить пул.
Проблема:
- Если организовывать опрос пула циклически, съедается 100% одного ядра CPU, начинает дико тормозить интернет-обозреватель и в конце концов может аварийно завершить работу.
Как можно реализовать скрипт для данной задачи – смотрите ниже: