Подтвердить что ты не робот

Изменить приоритет процесса в Python, кросс-платформенную

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

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

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

4b9b3361

Ответ 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 (было бы сложно упаковать этот комбо, но какую дополнительную выгоду вы бы увидели, просто упаковав его? -)