Относительно простой скрипт на Python с использованием 100% процессора - PullRequest
2 голосов
/ 15 декабря 2010

Я не собираюсь предоставлять код, потому что он слишком длинный.Сценарий python включает выполнение большого количества команд, выполняемых в цикле while.

Базовая структура

while True:
    The meat goes here
    with the odd if:
        and stuff

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

У кого-нибудь есть идеи?Это довольно длинная последовательность событий, но они сильно зависят от оператора if, который не запускается слишком часто.100% -ная загрузка ЦП происходит до того, как этот конкретный оператор if даже срабатывает, поэтому я действительно в растерянности.

Редактировать: забыл указать, что он работает в среде Unix (Debian)

Ответы [ 5 ]

8 голосов
/ 15 декабря 2010

Если что-то мешает использованию ЦП (например, ожидание дискового ввода-вывода или сетевого ввода-вывода или приостановка выполнения в спящем режиме), использование ЦП всегда будет на уровне 100% во время работы программы.,

Возможно, вы захотите добавить в цикл time.sleep (numberOfSeconds), если не хотите, чтобы он все время использовал 100% ЦП, если он только проверяет определенное условие снова и снова.

3 голосов
/ 15 декабря 2010

100% CPU означает, что скрипт работает хорошо. Я не вижу никаких проблем. Если это мешает другим программам работать нормально, запустите скрипт с более низким приоритетом (приятно)

2 голосов
/ 15 декабря 2010

Вопрос в том, почему он должен не использовать 100%. Это значение по умолчанию для всего, что вы пишете. Чтобы он не использовал 100%, вам нужен специальный код, который сидит и ждет, когда что-то произойдет. Если у вас это есть, то ошибка в этом коде.

1 голос
/ 15 декабря 2010

Возможно, внутри цикла while есть break или continue, поэтому ваш код time.sleep(1) пропущен. Вы уверены, что часть time.sleep(1) выполняется?

0 голосов
/ 04 июля 2019

Проблема в том, что у вас нет оператора sleep в цикле, если только функция if не является true, поэтому ваш код зацикливается с невероятной скоростью, принимая огромные значения скорости процессора.сделать, это добавить строку сна с 0,1.

time.sleep(0.1)
...