2012-12-18 14 views
8

Po uruchomieniu mojego dłuższego programu, chcę obniżyć jego priorytet, aby nie pobierał wszystkich zasobów dostępnych na komputerze, na którym działa. Okoliczności sprawiają, że program sam się ogranicza.Nicing działający proces python?

Czy istnieje komenda podobnego do Pythona, której mógłbym używać, aby program nie wykorzystywał pełnej pojemności komputera, na którym działa?

Odpowiedz

16

zawsze można uruchomić proces z nice pythonscript,

ale jeśli chcesz ustawić piękny poziomie w skrypcie można zrobić:

import os 
os.nice(20) 

Można stopniowo zwiększa zawartość piękny wypoziomować dłuższy skrypt działa, więc zużywa coraz mniej zasobów w czasie, co jest prostą sprawą zintegrowania go ze skryptem.

Alternatywnie spoza skryptu, gdy jest uruchomiony powinieneś móc korzystać renice -p <pid>

+0

z normalnym zastrzeżeniem, że jeżeli nie działa jak 'root' (lub podobny) nie można' nice' "w dół" –

+0

co jest semantyczna niszę? – AME

+2

Nicea bierze liczbę od '-20' do' + 20'. Zwykły użytkownik dojrzewa do maksymalnej wartości "20". Uprzywilejowany użytkownik może zgasić, do minimalnej wartości "-20". Wywołanie zwraca prośbę o wyregulowanie ładnego poziomu o wybraną wartość, aby ładnie (i zużywając mniej CPU) używał wartości dodatniej. Aby dobrze "obniżyć", użyjesz wartości ujemnej. – Petesh

4

psutil wydaje się być wieloplatformowym rozwiązaniem ustawiania priorytetu procesu dla Pythona.

https://github.com/giampaolo/psutil

okien specyficzne rozwiązanie: 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 dla Windows - ale jeśli 'nice' jest ogólnym terminem, myślałem, że to * nix oparty –

Powiązane problemy