2012-12-18 11 views
8

長時間実行しているプログラムが起動するときに、優先度を下げて、実行しているマシン上のすべてのリソースを消費しないようにします。状況によって、プログラムがそれ自体を制限する必要があります。実行中のPythonプロセスのネーキング?

私はプログラマーが実行中のコンピュータの全容量を利用しないように使うことができるような素敵なpythonコマンドがありますか?

答えて

16

あなたはいつも、nice pythonscriptでプロセスを実行

しかし、あなたはあなたができるスクリプト内の素敵なレベルを設定したい場合はすることができます

import os 
os.nice(20) 

あなたは徐々に長く素敵レベルをインクリメントすることができスクリプトが実行されているため、時間が経つにつれてリソースが少なくて済みます。これはスクリプトに統合する簡単な問題です。

また、スクリプトの外から、それが実行している一度あなたがrenice -p <pid>

+0

あなたがroot'(または類似) 'として "ダウン"' nice' –

+0

をすることはできません実行している場合を除き、何があると、通常の警告で裸の意味論? – AME

+2

ニースは '-20'から' +20'までの数字を取ります。通常のユーザは、最大アップ値「20」までアップする。特権を持つユーザは、 '-20'の最小値にまで下げていくことができます。コールは選択された値でniceレベルを調整する要求を出しているので、nice(そしてCPU使用量を少なくする)には正の値を使用します。素敵な「ダウン」には、負の値を使用します。 – Petesh

4

psutilを使用することができるはずはPython用のプロセスの優先度を設定するクロスプラットフォーム・ソリューションであることが表示されます。

https://github.com/giampaolo/psutil

窓具体的な解決策: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 for Windows - 「nice」が一般的な用語でない限り、私はそれが* nixに基づいていると思っていました –

関連する問題