LINUX.ORG.RU

Узнать если любой процесс из списка завершился

 


0

1

Предположим мы стартанули некоторое кол-во процессов. По завершению одного из них(или нескольких) нужно стартануть еще. Задача держать максимальную загрузку на железе и при этом не повесить систему сожрав все ресурсы.

Язык питон, но интересно как такое реализуется в принципе.

★★

Последнее исправление: Booster (всего исправлений: 1)

Ответ на: комментарий от AKonia

Значит оно мониторит все дочерние процессы и возвращает управление если хотя-бы один из них поменял статус? Спасибо. Осталось понять как прикрутить это к пистону.

Booster ★★
() автор топика

Всё описано в документации модуля subprocess, её необходимо вдумчиво прочитать от корки до корки.

Чтобы отслеживать множество объектов, нужно написать класс-обёртку, через которую будет происходить управление процессами. Отслеживать их завершение можно двумя способами:

  • Проходить циклом по списку, вызывая метод poll() у объектов Popen, используя любой удобный способ шедулинга (не зная ТЗ, можно и на эту тему расписать простыню вариантов). Это просто и понятно, но будет задержка в запуске новых процессов.
  • Использовать асинхронный Process.wait() из asyncio, о чём есть специально выделенная сноска документации метода Popen.wait(), ведущая сюда и далее сюда.

В общем, это архитектурный вопрос. Нужно чаще читать документацию - язык развивается, у него появляется новое API. Использовать psutil и прочие лишние зависимости можно, но в данном случае - избыточно костыльно, когда всё есть прямо в стандартной библиотеке.

InterVi ★★★★
()
3 мая 2021 г.
Ответ на: комментарий от InterVi

Да, это все так, читать документацию нужно. Но если нужен 2 пистон и еще под винду. В общем сделал через poll. Да есть цикл с задержкой, но вроде работает норм.

Booster ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.