2012-12-18 56 views
8

Khi chương trình chạy dài hơn của tôi bắt đầu, tôi muốn giảm mức độ ưu tiên của nó để nó không tiêu thụ tất cả các tài nguyên có sẵn trên máy chạy. Trường hợp làm cho nó cần thiết rằng programm giới hạn chính nó.Nicing một quá trình python đang chạy?

Có một lệnh python giống như tôi có thể sử dụng để programm không sử dụng toàn bộ dung lượng của máy tính đang chạy không?

Trả lời

16

bạn luôn có thể chạy các quá trình với nice pythonscript,

nhưng nếu bạn muốn thiết lập các cấp thoải mái trong kịch bản mà bạn có thể làm:

import os 
os.nice(20) 

Bạn dần dần có thể tăng mức độ thoải mái càng dài kịch bản đang chạy, vì vậy nó sử dụng ít tài nguyên hơn theo thời gian, đây là một vấn đề đơn giản khi tích hợp nó vào tập lệnh.

Ngoài ra, từ bên ngoài kịch bản, một khi nó đang chạy bạn sẽ có thể sử dụng renice -p <pid>

+0

Với caveat bình thường rằng trừ khi chạy là 'root' (hoặc tương tự), bạn có thể không 'nice' "xuống" –

+0

là những gì ngữ nghĩa của nicing xuống? – AME

+2

Nice lấy một số từ '-20' đến' + 20'. Một người dùng bình thường nices lên, đến một giá trị tối đa lên '20'. Một người dùng đặc quyền có thể giảm xuống, với giá trị giảm tối thiểu là '-20'. Cuộc gọi đang thực hiện yêu cầu điều chỉnh mức độ đẹp bằng giá trị được chọn, vì vậy để sử dụng tốt (và sử dụng ít CPU hơn), bạn sử dụng giá trị dương. Để đẹp 'xuống', bạn sử dụng giá trị âm. – Petesh

4

psutil dường như là một nền tảng giải pháp thập tự giá để thiết lập quá trình ưu tiên cho python.

https://github.com/giampaolo/psutil

Các cửa sổ giải pháp cụ thể: 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

Tiện dụng cho Windows - nhưng trừ khi 'nice' là một thuật ngữ chung, tôi đã nghĩ rằng nó dựa trên * nix –

Các vấn đề liên quan