Порядок завершения в пуле заданий

Задача по программированию с проверкой онлайн

Сложность
Средняя
Языки
Python
JavaScript
TypeScript
Темы
Асинхронность и потоки
Массивы и списки

Дан список заданий jobs и число limit (не меньше 1). Задание — асинхронная функция без аргументов: вызовите её (await job()), чтобы выполнить его; оно может завершиться ошибкой (исключением). Выполняйте задания так, чтобы одновременно работало не больше limit из них, и запускайте их строго по порядку индексов: сначала первые limit заданий, а как только любое запущенное задание завершается (со значением или с ошибкой), в тот же момент запускайте следующее по индексу.

Верните значения успешно завершившихся заданий в порядке завершения; задания, завершившиеся в один и тот же момент, идут по возрастанию индекса. Задание, завершившееся ошибкой, в ответ не попадает, но его место освобождается. Для пустого списка верните []. Текущее время в миллисекундах: Date.now() в JS/TS, round(asyncio.get_running_loop().time() * 1000) в Python. В списке до 50 заданий.

Пример: задания работают 30, 10 и 10 мс и возвращают 1, 2 и 3, limit = 2 → [2, 3, 1] (задание с индексом 2 стартует в 10 мс, когда освободилось место, и завершается в 20 мс).


Источник: задача CodeShare

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки