2012-12-18 17 views
8

Daha uzun süren programım başladığında, önceliğini azaltmak istiyorum, böylece çalıştığı makinede kullanılabilir tüm kaynakları kullanmaz. Koşullar, programın kendini sınırlandırmasını gerekli kılar.Çalışan bir python işlemini mi yapıyorsunuz?

Kullanabileceğim bilgisayarın tam kapasitesini kullanmamak için kullanabileceğim hoş bir python komutu var mı?

hep nice pythonscript işlemi çalıştırabilirsiniz

cevap

16

,

ancak yapabileceğiniz komut dosyası içinde güzel-düzeyini ayarlamak isterseniz:

import os 
os.nice(20) 

Sen giderek daha uzun güzel seviyesini artırır olabilir betik çalışıyor, bu yüzden zaman içinde daha az ve daha az kaynak kullanıyor, bu da betiğe entegre etmenin basit bir meselesi.

Alternatif senaryo dışından, Çalışıyorsa kez renice -p <pid>

+0

Eğer root' (veya benzeri) 'olarak "aşağı"' nice' –

+0

olamaz çalışan sürece ne normal ihtar ile niceleme anlamsız? – AME

+2

Nice, -20 ile 2020 arasında bir sayı alır. Sıradan bir kullanıcı, en yüksek "20" değerine ulaşır. Ayrıcalıklı bir kullanıcı, -20’nin en düşük değerine düşebilir. Arama, güzel seviyeyi seçilen değere göre ayarlamak için bir talepte bulunuyor, bu yüzden hoş (ve daha az CPU kullanıyor), pozitif bir değer kullanıyorsunuz. Güzel 'aşağı' için negatif bir değer kullanırsınız. – Petesh

4

psutil kullanmak gerekir piton için işlem önceliğini ayarlayarak için bir çapraz platform çözümü olarak görünmektedir.

https://github.com/giampaolo/psutil

pencereleri belirli çözüm: 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

Windows için kullanışlı - ama 'güzel' genel bir terim olmadıkça, bunun * nix tabanlı olduğunu düşünüyordum –

İlgili konular