Как запустить код Python, используя менее 1% процессора?

1

Я разрабатываю код Python для Windows. Критерием является то, что он будет использовать менее 1% процессора. Я понимаю, что это невозможно гарантировать все время из-за таких вещей, как сбор мусора, но как лучше всего было бы как можно ближе подойти. Мое текущее решение состоит в том, чтобы распространять много time.sleep(0.1) вокруг кода, особенно в циклах. Тем не менее, есть очевидные проблемы с этим подходом.

Какие другие подходы можно было бы предпринять?

Следует также упомянуть, что приложение имеет много потоков в нем, используя библиотеку threading.

EDIT: Настройка приоритета процесса - это не то, что мне нужно.

  • 0
    Попробуйте еще раз рассказать всем нам о том, почему вам нужно сохранять нагрузку на ЦП столь низкой, несмотря на наличие кода, не привязанного к вводу / выводу. (Код, связанный с вводом / выводом, включая большой графический интерфейс и сетевой код, естественно, приводит к низкой загрузке ЦП.)
  • 0
    @Donal Fellows. Это чисто эстетическая причина, которая заключается в том, что мое приложение никогда не будет беспокоить пользователя или замедлять его. Я буду использовать диспетчер задач Windows, чтобы доказать свою точку зрения на ИТ-отдел потенциального клиента. Если я смогу соответствовать этим критериям, процесс продаж будет проще. Я знаю, что процессор, конечно, не единственный критерий и, вероятно, наименее важный, но его легко показать.
Показать ещё 6 комментариев
Теги:
python-3.x

3 ответа

11

Если целью является не беспокоить пользователя, тогда "ниже 1% CPU" является неправильным подходом. То, что вы действительно хотите, - "не убирайте время от других процессов, но все равно выполняйте как можно быстрее" - это то, что для "приоритета" ниже. См. Http://code.activestate.com/recipes/496767-set-process-priority-in-windows/ для примера того, как приоритет процесса может быть изменен для текущего процесса (вызов этой функции с параметрами по умолчанию будет выполняться).

Для рекламного ролика вы можете показать диспетчер задач, пока компьютер не работает ("См. 99%, мое приложение получает много работы"), а затем запустите приложение с интенсивным использованием процессора ("Почти все время процессора расходуется в приложении пользователь работает, мое приложение просто зашло в фон ").

  • 0
    Проблема в том, что я не могу быть там, когда ребята тестируют приложение. Я мог бы просто услышать, что мое приложение было удалено, потому что оно оказалось причиной некоторых недавних жалоб на производительность систем (такое приложение легко использовать, как козла отпущения).
11

Задача операционной системы - запланировать время процессора. Используйте встроенные механизмы ограничений операционной системы (надеюсь, они существуют в Windows), чтобы ограничить ваш процесс до <1% CPU.

Этот стиль разбрызгивания лишних спит каждые несколько строк в коде сделает код страшным создавать, расширять и поддерживать, не говоря уже о невероятно неэлегантном. (Ограничение скорости самостоятельно может быть полезно в очень маленьких, ограниченных критических разделах - например, ваша программа ставит в очередь множество запросов ввода-вывода, и вы не хотите наводнять операционную систему, возможно, вы захотите установить один сон до - [условие] в каждом критическом цикле, который может наводнить систему, но в противном случае использовать чрезвычайно экономно.)

В идеале вы должны вызывать API для соответствующих механизмов ОС из вашей программы при запуске, сообщая ОС, чтобы соответствующим образом дросселировать вас.

  • 0
    Я не верю, что такая функция существует под Windows.
3

Если ящик, используемый для демонстрации, является Windows Server, он может использовать диспетчер системных ресурсов Windows для ограничения использования ЦП ниже желаемого порога. Попытка заставить это поведение по коду невозможно, если только Windows API не предоставляет эту возможность явно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню