LINUX.ORG.RU

Что-то в маленьком скрипте жрёт проц

 


0

1

Можете объяснить, что в этом скриптике отжирает по 60% (а реально 27%) каждого из двух CPU на нетбуке?

#!/usr/bin/python2
# -*- coding: utf-8 -*-

import sys, subprocess, time

def pppdcheck():
    global pppdchecktime
    if time.time() - pppdchecktime > 40:
        ret = subprocess.Popen("ifconfig", stdout=subprocess.PIPE, shell=True).stdout.read()
        if ( ret.find('ppp0') == -1 ):
            pppdrestart = subprocess.Popen("pon 3g && sleep 37", stdout=subprocess.PIPE, shell=True).stdout.read()
    return 1

def main():
    while pppdcheck(): pass

pppdchecktime = time.time()
main()
Напрягает несколько, кхм.

★★★

Последнее исправление: true_admin (всего исправлений: 1)

Потому что sleep 37 выполняется в отдельном процессе, порожденном Popen.

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

А как иначе можно сделать то, что делает этот скрипт? Он должен следить за существованием ppp0, и если он куда-то пропал, то создавать его снова.

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

sleep грузит проц? О_о Он из зацикленного NOP что ли состоит?
А как сделать паузу средствами скрипта, например?

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

Спасибо, скоро попробую, а то пирог подгорит

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

Не, пауза именно скрипту при выполнении нужна. Просто я не знал как её сделать средствами Python и поэтому просто добавил в выполняемую команду.

kostett ★★★
() автор топика

Используй subprocess.check_output или Popen.wait

true_admin ★★★★★
()

что в этом сраном скриптике отжирает по 60% (а реально 27%) каждого из двух CPU на нетбуке?

питон

anonymous
()

Оужас.

#!/bin/bash
while :; do
 ifconfig | grep -wq ppp0 || pon 3g
 sleep 40
done
Или даже
#!/bin/bash
while :; do
 [[ -e /sys/dev/net/ppp0 ]] || pon 3g
 sleep 40
done
А ещё можно посмотреть в man pppd на предмет /etc/ppp/ip-down

anonymous
()

Хотел ужаснутся, но выше уже всё написали...

ei-grad ★★★★★
()
Ответ на: комментарий от kostett

sleep грузит проц? О_о Он из зацикленного NOP что ли состоит?

У тебя бесконечный while же. Он и грузит проц. Попробуй вместо

while pppdcheck(): pass
while pppdcheck(): time.sleep(1)

Такой ход в том же C++ помогает значительно уменьшить нагрузку. Думаю должно и в python сработать.

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

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

kostett ★★★
() автор топика

pon 3g && sleep 37

Зачем? Неужели питон не умеет засыпать?

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

чессна говоря, мне плюсы понятнее баша, потому что первый мой язык программирования был C вперемешку с ARM-ассемблером ._.

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