2012-06-05 10 views
10

Quali sono gli equivalenti di Windows ai meccanismi di limite delle risorse esposti sui sistemi Unix dal modulo resource di Python e POSIX setrlimit?Limiti di risorse su Windows?

In particolare, sto limitando il tempo del processore per un processo figlio a diversi secondi. Se non è stato completato entro il vincolo, è terminato.

+0

Non esiste in Windows per quanto ne so. Il più vicino che puoi ottenere è un lavoro (introdotto con Windows 2000) che controlli dal tuo stesso processo. Tuttavia, i limiti delle risorse nel modo in cui SUS li definisce non esistono in Windows. – 0xC0000022L

+0

BTW: dai un'occhiata a Process Lasso. Potrebbe essere in parte ciò che ti interessa. La domanda è se fornisce tutto ciò che ti serve ... – 0xC0000022L

risposta

2

AFAIK, non esiste un modo portatile per ottenere informazioni sulla quantità di tempo del processore utilizzata da un processo figlio in Python. Ma ciò che fa il modulo subprocess (supponendo che tu stia iniziando il bambino con subprocess.Popen, che è raccomandato) è l'ID di processo del processo figlio in Popen.pid. Quello che potresti fare su Windows è eseguire tasklist (vedi manual) usando subprocess.check_output ripetutamente ed estrarre le informazioni sul figlio proces dal suo output, usando il PID come filtro.

Non appena il processo figlio ha avuto un tempo di CPU sufficiente e se è stato utilizzato subprocess.Popen() per avviare il processo figlio, è possibile utilizzare il metodo Popen.kill per eliminarlo.

Ma penso che sarebbe più facile uccidere il processo figlio dopo un determinato numero di secondi di tempo di parete utilizzando un timer. Perché se il processo figlio si blocca senza usare il tempo della CPU (per qualsiasi ragione), così fa il tuo programma python che lo aspetta per consumare il tempo della CPU.