Ограничения ресурсов для Windows?

Каковы эквиваленты Windows для механизмов ограничения ресурсов, открытых в Unix-системах с помощью модуля Python resource и POSIX setrlimit?

В частности, я ограничиваю процессорное время для дочернего процесса до нескольких секунд. Если он не завершился в рамках ограничения, он завершается.

Ответ 1

AFAIK, нет никакого переносимого способа получения информации о количестве процессорного времени, используемого дочерним процессом в Python. Но что делает модуль subprocess (при условии, что вы запускаете дочерний элемент с subprocess.Popen, который рекомендуется), дайте вам идентификатор процесса дочернего процесса в Popen.pid. Что вы можете сделать в Windows, запустите tasklist (см. руководство), используя subprocess.check_output несколько раз и извлекая информацию о дочерних процессах из своего вывода, используя PID в качестве фильтра.

Как только дочерний процесс имеет достаточно процессорного времени, и если вы использовали subprocess.Popen() для запуска дочернего процесса, вы можете использовать метод Popen.kill, чтобы его убить.

Но я думаю, что было бы легче убить дочерний процесс после определенного количества секунд времени на стене с помощью таймера. Потому что, если дочерний процесс зависает без использования времени процессора (по какой-либо причине), ваша программа python ожидает, что она будет потреблять процессорное время.