Управление приоритетом задач в планировщике заданий Windows

Есть одна неочевидная и малоизвестная особенность при запуске задач через планировщик заданий Windows (Task Scheduler). Если пользователь запустит одно и то же задание (команду, скрипт), интенсивно использующее ресурсы компьютера, вручную из командной строки (интерактивно) и через планировщик, можно заметить, что задание, запущенное через Task Scheduler, выполняется заметно дольше. Дело в том, что планировщик по умолчанию запускает любые задания с низким приоритетом, в результате на нагруженных системах такое задание будет получать меньше процессорного времени и соответственно, выполнятся медленнее.

В моем случае Python скрипт, который запускается через Task Scheduler выполнялся почти в 3 раза дольше, чем при запуске его пользователем вручную из среды разработки или командной строки.

Чтобы понять, с каким приоритетом запущен процесс, откройте Task Scheduler, на вкладке Details найдите исполняемый файл процесс и в контекстном меню выберите пункт Set priority. Отсюда можно изменить текущий приоритет процесса и посмотреть с каким приоритетом выполняется данный процесс сейчас (либо можно добавит отдельный столбец Base Priority прямо в список процессов в Task Manager).

На первом скриншоте показан процесс python.exe , который выполняет py скрипт и запущен из задания Task Scheduler. Как вы видите, этот процесс имеет низкий приоритет выполнения (Below normal).

Низкий приоритет процессов, запущенных через Task Scheduler - Below normal

Если же этот самый Python скрипт запустить интерактивно, то он будет выполнятся с обычным приоритетом процесса (Normal).

Приоритет обычных процессов в task manager

Низкий приоритет задания планировщика Windows не только уменьшает количество доступного ему процессорного времени, но и уменьшает скорость дисковых операций чтения/записи к дискам и низкий приоритет страниц памяти. Все это может привести к тому, что процессы, запущенные из планировщика будут отрабатывать заметно медленнее, чем при ручном запуске.

В настройках задания планировщика отсутствует опция для настройки приоритета выполнения задания. В ранних версиях Windows приоритет задания можно было изменить ручным редактированием XML файла с настройками задания.

  1. Откройте консоль Task Scheduler taskschd.msc
  2. Найдите ваше задание, выберите его и экспортируйте его в XML файл Экспорт задания планировщика в XML файл
  3. Откройте XML файл задания с помощью любого тестового редактора. В разделе Priority указан текущий приоритет задания. По умолчанию это 7, означающее приоритет ниже среднего. Увеличить приоритет задания планировщика в XML файле
  4. Для повышения приоритета процесса этого задания, измените это значение на 5 (выше среднего).
    Приоритет задания планировщика задается в диапазоне от 0 до 10, где 0 это максимальный приоритет (realtime), а 10 – самый низкий (фоновый).
  5. Сохраните изменения в XML файле, удалите в консоли планировщика старое задание и импортируйте отредактированное задание из вашего XML файла (Action -> Import Task). Импорт задания в планировщик
  6. Теперь при запуске такого задания через Task Scheduler оно будет запускаться с более высоким приоритетом (Below Normal).

Задание планировщика запущено с повышенным приоритетом

Однако, если вы отредактируйте любую из опций этого задания через графическую консоль планировщика задач Windows, его приоритет опять будет сброшен на низкий (7). Поэтому придется еще раз экспортировать задания в XML файл, отредактировать и снова импортировать в консоль.

Начиная с версии PowerShell 3.0 в Windows появился встроенный модуль ScheduledTasks для управления заданиями планировщика. В этом модуле доступе командлет для управления приоритетами заданий Task Scheduler.

Чтобы изменить приоритет определенного задания, укажите его имя в следующем PowerShell скрипте:

$myTaskName=”py_Task_InspectResult”
$myPriority = New-ScheduledTaskSettingsSet -Priority 5
Set-ScheduledTask -TaskName $myTaskName -Settings $myPriority

New-ScheduledTaskSettingsSet - изменить приоритет задания планировщика с помощью PowerShell

Чтобы узнать текущий приоритет задания, выполните:

$task = Get-ScheduledTask -TaskName ”py_Task_InspectResult”
$task.Settings.Priority

Get-ScheduledTask Priority

Если вы изменили приоритет задания с помощью командлетов New-ScheduledTaskSettingsSet и Set-ScheduledTask, он не будет сброшен при ручном редактирований параметров задания через оснастку Task Scheduler.

Если вы распространяете задание планировщика на компьютеры пользователей через доменные GPO, приоритет можно изменить в XML файле с настройками политики в каталоге SYSVOL. Найдите папку GPO по ее ID в SYSVOL и перейдите в директорию Machine или User\Preferences\ScheduledTasks . Откройте файл SheduledTasks.xml и отредактируйте значение параметра Priority в разделе <Settings> .

Увеличить приоритет для задания Task Sheduler в GPO на SYSVOL


Предыдущая статья Следующая статья


Комментариев: 1 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)