Изменить приоритет процесса в Python, кросс-платформенный - PullRequest
25 голосов
/ 21 июня 2009

У меня есть программа на Python, которая выполняет трудоемкие вычисления. Поскольку он использует высокую загрузку процессора и я хочу, чтобы моя система оставалась отзывчивой, я бы хотел, чтобы программа изменила свой приоритет на уровень ниже нормального.

Я нашел это: Установить приоритет процесса в Windows - ActiveState

Но я ищу кроссплатформенное решение.

Ответы [ 3 ]

33 голосов
/ 21 июня 2009

Вот решение, которое я использую для установки моего процесса с приоритетом ниже обычного:

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.

18 голосов
/ 05 июня 2011

Вы можете использовать модуль 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)
9 голосов
/ 21 июня 2009

На каждой Unix-подобной платформе (включая Linux и MacOsX) см. os.nice здесь :

os.nice(increment)
Add increment to the process’s “niceness”. Return the new niceness. Availability: Unix.

Поскольку у вас уже есть рецепт для Windows, который охватывает большинство платформ - вызывайте os.nice с положительным аргументом везде, кроме Windows, используйте этот рецепт там. Не существует «красиво упакованного» кроссплатформенного решения AFAIK (было бы сложно упаковать этот комбо, но какую дополнительную выгоду вы бы увидели, просто упаковав его? -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...