2012-12-18 42 views
8

Quando inizia il mio programma più lungo, voglio abbassarne la priorità in modo che non consumi tutte le risorse disponibili sulla macchina in esecuzione. Le circostanze rendono necessario che il programma limiti se stesso.Nettante un processo Python in esecuzione?

C'è un comando python carino che potrei usare in modo che il programma non sfrutti tutta la capacità del computer su cui è in esecuzione?

risposta

16

è sempre possibile eseguire il processo con nice pythonscript,

, ma se si desidera impostare il bel livello all'interno dello script si può fare:

import os 
os.nice(20) 

Si potrebbe progressivamente incrementare il livello piacevole il più a lungo lo script è in esecuzione, quindi utilizza sempre meno risorse nel tempo, che è una semplice questione di integrarlo nello script.

In alternativa, al di fuori dello script, una volta che è in esecuzione si dovrebbe essere in grado di utilizzare renice -p <pid>

+0

Con l'avvertenza che, se non normale esecuzione come 'root' (o simili) non si può' nice' "down" –

+0

qual è il semantica di nicing giù? – AME

+2

Nice prende un numero da '-20' a' + 20'. Un utente ordinario aggiusta fino a un valore massimo di '20'. Un utente con privilegi può avere un down down minimo di '-20'. La chiamata sta facendo una richiesta per regolare il livello piacevole in base al valore scelto, quindi per ottenere un valore positivo (e utilizzare meno CPU), si utilizza un valore positivo. Per un bel "down", usi un valore negativo. – Petesh

4

psutil sembra essere una soluzione cross-platform per l'impostazione priorità del processo per Python.

https://github.com/giampaolo/psutil

La soluzione specifica finestre: http://code.activestate.com/recipes/496767/

def setpriority(pid=None,priority=1): 
""" Set The Priority of a Windows Process. Priority is a value between 0-5 where 
    2 is normal priority. Default sets the priority of the current 
    python process but can take any valid process ID. """ 

import win32api,win32process,win32con 

priorityclasses = [win32process.IDLE_PRIORITY_CLASS, 
        win32process.BELOW_NORMAL_PRIORITY_CLASS, 
        win32process.NORMAL_PRIORITY_CLASS, 
        win32process.ABOVE_NORMAL_PRIORITY_CLASS, 
        win32process.HIGH_PRIORITY_CLASS, 
        win32process.REALTIME_PRIORITY_CLASS] 
if pid == None: 
    pid = win32api.GetCurrentProcessId() 
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, True, pid) 
win32process.SetPriorityClass(handle, priorityclasses[priority]) 
+1

Handy per Windows - ma a meno che 'nice' non sia un termine generico, stavo pensando che sia basato su * nix –

Problemi correlati