2012-06-05 11 views
10

¿Cuáles son los equivalentes de Windows a los mecanismos de límite de recursos expuestos en los sistemas Unix por el módulo de Python resource y POSIX setrlimit?¿Límites de recursos en Windows?

Específicamente, estoy limitar el tiempo de procesador para un proceso hijo a varios segundos. Si no se ha completado dentro de la restricción, se cancela.

+0

No existe en Windows, que yo sepa. Lo más cerca que probablemente pueda obtener es un trabajo (introducido con Windows 2000) que controle desde su propio proceso. Sin embargo, los límites de recursos en la forma en que SUS los define no existen en Windows. – 0xC0000022L

+0

BTW: eche un vistazo a Process Lasso. Puede ser en parte lo que le interesa. La pregunta es si proporciona todo lo que necesita ... – 0xC0000022L

Respuesta

2

yo sepa, no hay ninguna manera portátil de obtener información sobre la cantidad de tiempo de procesador utilizado por un proceso hijo en Python. Pero lo que hace subprocess módulo (suponiendo que esté comenzando con el niño subprocess.Popen, que se recomienda) dan es el ID de proceso del proceso hijo en Popen.pid. Lo que podría hacer en Windows se ejecuta tasklist (ver manual) usando subprocess.check_output repetidamente y extraer la información sobre los niños proces de su salida, usando el PID como un filtro.

Tan pronto como el proceso hijo tenga suficiente tiempo de CPU y haya utilizado subprocess.Popen() para iniciar el proceso hijo, puede usar el método Popen.kill para matarlo.

pero creo que sería más fácil para matar el proceso hijo después de después de un número especificado de segundos de tiempo de la pared utilizando un temporizador. Porque si el proceso secundario se bloquea sin utilizar el tiempo de CPU (por la razón que sea), también lo hace su programa python que está esperando que consuma tiempo de CPU.