Изменить приоритет процесса в Python, кросс-платформенную
У меня есть программа Python, которая требует много времени. Поскольку он использует высокий процессор, и я хочу, чтобы моя система оставалась отзывчивой, я хотел бы, чтобы программа изменила свой приоритет на нормальный.
Я нашел это:
Установить приоритет процесса в Windows - ActiveState
Но я ищу кросс-платформенное решение.
Ответы
Ответ 1
Здесь решение, которое я использую, чтобы установить мой процесс на приоритет ниже обычного:
lowpriority.py
def lowpriority():
""" Set the priority of the process to below-normal."""
import sys
try:
sys.getwindowsversion()
except AttributeError:
isWindows = False
else:
isWindows = True
if isWindows:
# Based on:
# "Recipe 496767: Set Process Priority In Windows" on ActiveState
# http://code.activestate.com/recipes/496767/
import win32api,win32process,win32con
pid = win32api.GetCurrentProcessId()
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, True, pid)
win32process.SetPriorityClass(handle, win32process.BELOW_NORMAL_PRIORITY_CLASS)
else:
import os
os.nice(1)
Протестировано на Python 2.6 в Windows и Linux.
Ответ 2
Вы можете использовать psutil модуль.
На платформах POSIX:
>>> import psutil, os
>>> p = psutil.Process(os.getpid())
>>> p.nice()
0
>>> p.nice(10) # set
>>> p.nice()
10
В Windows:
>>> p.nice(psutil.HIGH_PRIORITY_CLASS)
Ответ 3
На каждой Unix-подобной платформе (включая Linux и MacOsX) см. os.nice
здесь:
os.nice(increment)
Add increment to the processs 'niceness'. Return the new niceness. Availability: Unix.
Поскольку у вас уже есть рецепт для Windows, который охватывает большинство платформ - вызывайте os.nice с положительным аргументом везде, кроме Windows, используйте этот рецепт там. Не существует "красиво упакованного" кроссплатформенного решения AFAIK (было бы сложно упаковать этот комбо, но какую дополнительную выгоду вы бы увидели, просто упаковав его? -)