LINUX.ORG.RU

Как бороться с загрузкой CPU?


0

0

Есть скриптик, он дергает инфу о mpd - что за песня сейчас играет, исполнителя, время и т.д. Этот скриптик дергает xmobar. Дергает он его каждую секунду. time mpd.sh дает 0.200, т.е. скриптик этот грузит камень примерно процентов на 20. Что делать?

Какая-то фигня идея «все файл». Сообщения в винде вещь намного лучше. Нет в линуксу чего-нибудь подобного? kill же может передавать сигналы. Почему не сделать так:
1) Ты передаешь mpd сигнал со своим pidом и он регистрирует тебя.
2) Когда у mpd появляется какое-то событие, то он рассылает всем «подписчикам» сообщения.

Реализовано что-нибудь такое в линуксе? Ибо каждую секунду дергать все это очень жирно, но надо, т.к. в любой момент может измениться песня.

facelift
() автор топика

Сделать скриптик, который получает инфу от mpd не запуском mpc, а через tcp/ip.

Делается это посылкой status\n в хост/порт mpd (вернется play) и посылкой currentsong\n (вернется угадай что).

Потом, если песня поменялась, уже дергать xmobar

На питоне выглядит как-то так (копипаста из скрипта, делающего статус из mpd у gajim):

sock.connect((HOST, PORT))
sock.recv(1024)   #Обнуляем
try:
   while 1:
      sock.send(«status\n»)
      if status(sock.recv(1024)) == «play»:
         sock.send(«currentsong\n»)
         s=«\»(8) «+get(sock.recv(1024))+»\«»
         # тут пользуемся строкой с песней s
      else:
         # тут сообщаем, что mpd остановлен
      time.sleep(1)

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

Любители сообщений в винде могут открыть для себя dbus.

Да, также вот это http://trac.gajim.org/wiki/GajimAndMpd вероятно будет полезно

Ну и да, «все в файл» не значит, что это пишется в реальный файл на жестком диске

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

У меня не через mpc, а через telnet инфа берется, nc посылаю. Правда у меня скриптик bashевский. Вот наверное так и сделаю - напишу программулину которая будет все это делать. Но все равно бесит что есть загрузка - ты еняешь песню, а все это изменится лишь на следующую секунду, нет скорости реагирования. А вот я помню я пайпы создавал, а могу ли я сокет создать и туда данные пихать и считывать? Без nc же должно быть быстрее? Да и чтобы сокет на открывать/закрывать (это же долго наверное?) придется службу писать, а так если сокет открыт то можно наверное будет простым приложением обойтись, или вообще скриптик оставить. Можно так сделать?

facelift
() автор топика

Увеличь sleep раз в пять, а лучше в десять. У меня 10 сек было — нормально. Ещё в ncmpcpp, если память не изменяет, есть возможность дёргать внешнюю команду при смене песни.

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

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

Также, можно с сокетами работать прямо в bash:

exec 5<>/dev/tcp/localhost/6600
echo -n «$@
close» >&5
read s <&5
while [ «$s» != «OK» ]; do echo «$s»; read s <&5; done

Но в моей дефолтной убунте оно не работает. Вероятно, надо включить какую-о опцию ядра, чтоб появилось /dev/tcp: в общем, проще не заморачиваться и на нормальном языке типа питона написать

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

Quote:

Но в моей дефолтной убунте оно не работает. Вероятно, надо включить какую-о опцию ядра, чтоб появилось /dev/tcp

Не угадал =) В deb based, bash собирают без поддержки TCP.

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

> Какая-то фигня идея «все файл».

Зачем же сразу делать такие далекоидущие выводы? Очевидно же, что это mpd фигня, а не идея.

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

RTFM!

>Какая-то фигня идея «все файл». Сообщения в винде вещь намного лучше. Нет в линуксу чего-нибудь подобного?
man dbus, блджад!

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

Уже почти дописал прогу на чистом Си, работает раз в 100 быстрее чем скриптина баше. Допишу - выложу ее сюда

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

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

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

Quote:

Ну там надо хост и порт указывать при запуске приложения.

Мне кажется, лучше сначала попытаться получить их из переменных окружения =) man 3 getenv, если что вдруг.

Quote:

А что еще туда добавить?

Не знаю, MPD не пользуюсь.

Quote:

А нет там такой проги по ссылке?

На C — точно нет =) Там есть нотификаторы на shell и python.

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