Порядок завершения в пуле заданий
Задача по программированию с проверкой онлайн
- Сложность
- Средняя
- Языки
- 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