2012-12-18 15 views
8

जब मेरा लंबा चलने वाला प्रोग्राम शुरू होता है, तो मैं इसकी प्राथमिकता को कम करना चाहता हूं, इसलिए यह उस मशीन पर उपलब्ध सभी संसाधनों का उपभोग नहीं करता है। परिस्थितियां इसे आवश्यक बनाती हैं कि प्रोग्राम स्वयं ही सीमित हो।एक चल रहे पायथन प्रक्रिया का निर्धारण?

क्या कोई अच्छा पाइथन-कमांड है जिसका उपयोग मैं कर सकता था ताकि प्रोग्राम उस कंप्यूटर की पूर्ण क्षमता का उपयोग न करे जो यह चल रहा है?

उत्तर

16

आप हमेशा nice pythonscript साथ प्रक्रिया चला सकते हैं,

लेकिन आप उस स्क्रिप्ट के भीतर अच्छा स्तरीय आप कर सकते हैं सेट करना चाहते हैं:

import os 
os.nice(20) 

आप उत्तरोत्तर अब अच्छा स्तर को बढ़ा देते सकता है स्क्रिप्ट चल रही है, इसलिए यह समय के साथ कम और कम संसाधनों का उपयोग करती है, जो इसे स्क्रिप्ट में एकीकृत करने का एक साधारण मामला है।

वैकल्पिक रूप से, स्क्रिप्ट के बाहर से, एक बार यह चल रहा है आप का उपयोग करने के renice -p <pid>

+0

सामान्य चेतावनी है कि क्या है, जब तक कि 'root' (या समान) के रूप में' nice' "नीचे" –

+0

चल आप नहीं कर सकते हैं के साथ नीचे उतरने का अर्थपूर्ण? – AME

+2

नाइस '-20' से '20' तक एक संख्या लेता है। एक सामान्य उपयोगकर्ता '20' के अधिकतम अप-मान तक, nices। एक विशेषाधिकृत उपयोगकर्ता '-20' के न्यूनतम डाउन मान पर अच्छा लगा सकता है। कॉल चुने गए मूल्य से अच्छे स्तर को समायोजित करने का अनुरोध कर रहा है, इसलिए अच्छा (और कम CPU का उपयोग करें), आप सकारात्मक मान का उपयोग करते हैं। अच्छा 'डाउन' करने के लिए, आप ऋणात्मक मान का उपयोग करते हैं। – Petesh

4

psutil में सक्षम होना चाहिए अजगर के लिए प्रक्रिया प्राथमिकता की स्थापना के लिए एक पार मंच समाधान प्रतीत होता है।

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

विंडोज के लिए सुविधाजनक - लेकिन जब तक कि 'अच्छा' एक सामान्य शब्द न हो, मैं सोच रहा था कि यह * निक्स आधारित है –

संबंधित मुद्दे