LINUX.ORG.RU

while true жрет 100% процессора

 


0

2

вот такой код

  while True:            
            if datetime.now().time() == pList[1]:
                pList = do_callback()  #почти никогда не выполняется
            
            if self.status == 'waitstop':
                self.__lock.acquire()
                self.status = 'ready'
                self.__lock.release()
                log.info('Stopping called')
                break
загружает проц на 100%, хотя 99% времени он ничего не делает

можно ли как-либо снизить использование процессора? спасибо, python только осваиваю.

★★★★
Ответ на: комментарий от drBatty

Прерывания на чем-то вроде Turbo Pascal или Turbo C++? Да, ты шутишь. Мы использовали бесконечный цикл. Это уже потом с приходом винды стало понятно, что бесконечный цикл - плохое решение.

dave ★★★★★
()
Ответ на: комментарий от x3al

У меня есть один дохлый целерон-prescott

супер, по одному процу делать выводы обо всех процах на свете....

true_admin ★★★★★
()
Ответ на: комментарий от drBatty

наверное градусов 80 у CPU

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

true_admin ★★★★★
()
Ответ на: комментарий от note173

который к следующей версии надо переписать с нуля

При проектировании все равно не учесть всего.

Вижу опыт есть :). Да, соглашусь что не всегда видно все подводные камни.

true_admin ★★★★★
()

«self.status == 'waitstop'», или в пистоне больше нет числовых типов и констант или тут кто - то поленился почитать хотябы Dive into Python. А еще патом же орут все: «Пистон тормоз, пистон тормоз!»

Seraph
()
Ответ на: комментарий от pashazz

ты задачу опиши, а мы тебе поможем. Вот я, например, не вижу у Condition метода wait_for в доках (но он есть, да). Но если это разновидность Condition.wait то ты используешь его неправильно.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Тут дело не только в подводных камнях, а больше в реакции пользователей. Это самое ценное, вместе со временем выхода первой версии.

Конечно, это применимо только к сравнительно небольшим проектам, не рассчитанным на профессиональную аудиторию.

note173 ★★★★★
()
Ответ на: комментарий от dave

Прерывания на чем-то вроде Turbo Pascal или Turbo C++?

на асме.

Да, ты шутишь. Мы использовали бесконечный цикл.

ну... не шучу.

drBatty ★★
()
Ответ на: комментарий от true_admin

думаю больше 100 градусов, у самого был такой селерон. Останови кулер у проца и посмотри что будет.

может и 100 на кристалле. не мерил. Там очень удачный был большой радиатор, и кроме того, удачный продув от вентилятора БП. Очевидно потому и продержался около года. Да и гоняли его в щадящем режиме (а что делать, ибо если запустить что-то тяжёлое, оно нафиг падало с BSOD, так и жили. Но потом он вообще сдох)

drBatty ★★
()
Ответ на: комментарий от Seraph

в питоне вообще-то много где для этого испооьзуются строки, а не константы. например в open() для указания режима открыщтия файла

pashazz ★★★★
() автор топика
Ответ на: комментарий от pashazz

Ну да, это у него борода такая от C вроде как, fopen принимает строковую константу в качестве аргумента режима открытия. Но ты прикинь, что при каждом проходе цикла, твоя программа будет сравнивать две строки, это же ужас какая дорогая операция. Можно же сравнивать просто два числа, которые в коде будут константами, это будет работать во много раз быстрее.

Seraph
()
Ответ на: комментарий от note173

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

А спагетти код возникает когда изначально программа была на 1 страницу, и все было вместе, не было никаких модулей и никакого апи. И все это начинают наращивать сохраняя архитектуру как есть - т.е никакой.

OxiD ★★★★
()
Ответ на: комментарий от pashazz

В том числе поэтому его и нужно закопать в пользу c#.

anonymous
()
Ответ на: комментарий от OxiD

Я не спорю, подробное проектирование — это хорошо и очень нужно. Просто не всегда оно так необходимо на первых этапах.

note173 ★★★★★
()
Ответ на: комментарий от note173

Я как раз таки не про подробное. Первоначальное проектирование должно помочь дальнейшему росту, и не давать коду превращаться в спагетти. А подробности нужны для реализации конкретных фич.

OxiD ★★★★
()
Ответ на: комментарий от OxiD

и не давать коду превращаться в спагетти

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

note173 ★★★★★
()
Ответ на: комментарий от note173

Насколько небольшие? Вообще кажется что в спагетти превращается код который часто правят и делают копипасту вместо рефакторинга.

OxiD ★★★★
()
Ответ на: комментарий от OxiD

Уровня плеера, клиента твиттера, IM-клиента или казуальной игры.

Спагетти-код возникает при необходимости вносить изменения, плохо предусмотренные архитектурой, в условиях нехватки времени.

note173 ★★★★★
()
Ответ на: комментарий от note173

Необязательно нехватки времени. Иногда когда нет четкой архитектуры и правил по которым надо добавлять функционал - людям просто лень.

OxiD ★★★★
()
Ответ на: комментарий от jessey

Казалось бы, при чём тут нагрузка в 100%?

одноядерный проц детектед. мой в таких случаях грузится всего на 13%

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

4 ядра у меня, одно грузится на 100%

pashazz ★★★★
() автор топика
Ответ на: комментарий от Seraph

«self.status == 'waitstop'», или в пистоне больше нет числовых типов и констант или тут кто - то поленился почитать хотябы Dive into Python.

Если 'waitstop' заменить на число, то разницы в производительности не будет никакой. Вообще.

И да, кто-то действительно поленился почитать хотя бы Dive Into Python, ибо в питоне нет констант...

Boba_Fett
()
Ответ на: комментарий от annulen

Экспериментальный факт, по крайней мере для linux (включая embedded)

как вообще busy loop может тормозить?

true_admin ★★★★★
()

while true жрет 100% процессора

а должно быть иначе?! Оо

erfea ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.