2015-11-26 3 views
1

Это код, который я написал. Он анализирует xml и включает свет, когда определенное условие истинно. Проблема у меня есть, если я перезапущу скрипт, для чтения или обработки xml требуется больше времени. Если я снова перезапущу, это займет еще больше времени. Поэтому в какой-то момент времени требуется 10 и более секунд, пока не пройдет один цикл.При повторном открытии скрипта скорость обработки уменьшается

def core(): 

    import urllib                #import urllib.request 

    x = 0 

    while True: 

     ### XML Extraction ### 
     from xml.dom import minidom 

     xml = urllib.urlopen("http://192.168.60.242/xml")      # xml = urllib.request.urlopen("http://192.168.60.242/xml") 
     xml_string = xml.read() 
     xml.close() 

     re_string = xml_string[130:4000] 
     re_string = re_string.replace('</TEXTAREA></FORM></BODY></HTML>', '') #zwecks inkompatibilität mit Python 3.5, muss hier eine Änderung vorgenommen werden 

     #parsing 
     xmldoc = minidom.parseString(re_string) 


     Sensor0Elm = xmldoc.getElementsByTagName('t0')         
     Sensor1Elm = xmldoc.getElementsByTagName('t1') 
     #Sensor2Elm = xmldoc.getElementsByTagName('t2') 

     Sensor0Elm = Sensor0Elm[0] 
     Sensor1Elm = Sensor1Elm[0] 
     #Sensor2Elm = Sensor2Elm[0] 

     Sensor0 = Sensor0Elm.childNodes[0].data 
     Sensor1 = Sensor1Elm.childNodes[0].data 
     #Sensor2 = Sensor2Elm.childNodes[0].data 


     Sensor0 = float(Sensor0) 
     Sensor1 = float(Sensor1) 
     #Sensor2 = float(Sensor2) 


     #Datenaufbereitung 
     print (Sensor0*100.000000000001) 
     print (Sensor1*100.000000000001) 
     #print (Sensor2*100) 


     ### int to bin ### 
     Sensor0=bin(int(Sensor0*100.000000000001)) 
     Sensor1=bin(int(Sensor1*100.000000000001)) 
     #Sensor2=bin(int(Sensor2*100)) 

     Sensor0 = Sensor0[2:] 
     Sensor1 = Sensor1[2:] 
     #Sensor2 = Sensor2[2:] 

     Sensor0_count_int = int(len(str(Sensor0))) 
     Sensor1_count_int = int(len(str(Sensor1))) 
     #Sensor2_count_int = int(len(str(Sensor2))) 

     Sub0 = int(8 - Sensor0_count_int) 
     Sub1 = int(8 - Sensor1_count_int) 
     #Sub2 = int(8 - Sensor2_count_int) 

     Sensor0_compl = (str(Sub0*"0")+Sensor0) 
     Sensor1_compl = (str(Sub1*"0")+Sensor1) 
     #Sensor2_compl = (str(Sub2*"0")+Sensor2) 

     x = x+1 
     print (">>>", x ,"<<<") 
     print (Sensor0_compl) 
     print (Sensor1_compl) 
     #print (Sensor2_compl) 


     ############################# 
    # import RPi.GPIO as GPIO 
    # GPIO.setmode(GPIO.BCM) 

    # GPIO.setup(4,GPIO.OUT) 
    # GPIO.setup(5,GPIO.OUT) 
    # GPIO.setup(6,GPIO.OUT) 
    # GPIO.setup(12,GPIO.OUT) 
    # GPIO.setup(13,GPIO.OUT) 

    # GPIO.setup(16,GPIO.OUT) 
    # GPIO.setup(17,GPIO.OUT) 
    # GPIO.setup(18,GPIO.OUT) 
    # GPIO.setup(19,GPIO.OUT) 
    # GPIO.setup(20,GPIO.OUT) 

    # GPIO.setup(21,GPIO.OUT) 
    # GPIO.setup(22,GPIO.OUT) 
    # GPIO.setup(23,GPIO.OUT) 
    # GPIO.setup(24,GPIO.OUT) 
    # GPIO.setup(25,GPIO.OUT) 
     ############################# 

     #Sensor0 
    # AgCh3A=(Sensor0_compl[0:1]) 
    # if AgCh3A=="0": 
    #  GPIO.output(4,True) 
    # else: 
    #  GPIO.output(4,False) 

    # AgPro2=(Sensor0_compl[1:2]) 
    # if AgPro2=="0": 
    #  GPIO.output(5,True) 
    # else: 
    #  GPIO.output(5,False) 

    # CharRo440=(Sensor0_compl[2:3]) 
    # if CharRo440=="0": 
    #  GPIO.output(6,True) 
    # else: 
    #  GPIO.output(6,False) 

    # AgInnoC=(Sensor0_compl[3:4]) 
    # if AgInnoC=="0": 
    #  GPIO.output(12,True) 
    # else: 
    #  GPIO.output(12,False) 

    # AgInnoB=(Sensor0_compl[4:5]) 
    # if AgInnoB=="0": 
    #  GPIO.output(13,True) 
    # else: 
    #  GPIO.output(13,False) 

    # ZK700=(Sensor0_compl[5:6]) 
    # if ZK700=="0": 
    #  GPIO.output(16,True) 
    # else: 
    #  GPIO.output(16,False) 

    # AgF3000=(Sensor0_compl[6:7]) 
    # if AgF3000=="0": 
    #  GPIO.output(17,True) 
    # else: 
    #  GPIO.output(17,False) 

    # ZK1200=(Sensor0_compl[7:8]) 
    # if ZK1200=="0": 
    #  GPIO.output(18,True) 
    # else: 
    #  GPIO.output(18,False) 

     #Sensor1 
    # AgProV3=(Sensor1_compl[3:4]) 
    # if AgProV3=="0": 
    #  GPIO.output(19,True) 
    # else: 
    #  GPIO.output(19,False) 

    # MakWPG1=(Sensor1_compl[4:5]) 
    # if MakWPG1=="0": 
    #  GPIO.output(20,True) 
    # else: 
    #  GPIO.output(20,False) 

    # AgExcell2eC=(Sensor1_compl[5:6]) 
    # if AgExcell2eC=="0": 
    #  GPIO.output(21,True) 
    # else: 
    #  GPIO.output(21,False) 

    # AgCh2eC=(Sensor1_compl[6:7]) 
    # if AgCh2eC=="0": 
    #  GPIO.output(22,True) 
    # else: 
    #  GPIO.output(22,False) 

    # AgCh3B=(Sensor1_compl[7:8]) 
    # if AgCh3B=="0": 
    #  GPIO.output(23,True) 
    # else: 
    #  GPIO.output(23,False) 
    ################################# 
    # MM5=(Sensor1_compl[5:6]) 
    # if MM5=="0": 
    #  GPIO.output(24,True) 
    # else: 
    #  GPIO.output(24,False) 

    # MM6=(Sensor1_compl[6:7]) 
    # if MM6=="0": 
    #  GPIO.output(25,True) 
    # else: 
    #  GPIO.output(25,False) 

    # MM7=(Sensor2_compl[0:1]) 
    # if MM7=="0": 
    #  GPIO.output(1,True) 
    # else: 
    #  GPIO.output(1,False) 


     #Sensor2 
    # MMM0=int(Sensor2[2:3]) 
    # if M0==1: 
    #  GPIO.output(1,True) 
    # else: 
    #  GPIO.output(1,False) 

    # MMM1=int(Sensor2[3:4]) 
    # if M0==1: 
    #  GPIO.output(1,True) 
    # else: 
    #  GPIO.output(1,False) 

    # MMM2=int(Sensor2[4:5]) 
    # if M0==1: 
    #  GPIO.output(1,True) 
    # else: 
    #  GPIO.output(1,False) 

    # MMM3=int(Sensor2[5:6]) 
    # if M0==1: 
    #  GPIO.output(1,True) 
    # else: 
    #  GPIO.output(1,False) 

    # MMM4=int(Sensor2[6:7]) 
    # if M0==1: 
    #  GPIO.output(1,True) 
    # else: 
    #  GPIO.output(1,False) 

    # MMM5=int(Sensor2[7:8]) 
    # if M0==1: 
    #  GPIO.output(1,True) 
    # else: 
    #  GPIO.output(1,False) 

    # MMM6=int(Sensor2[8:9]) 
    # if M0==1: 
    #  GPIO.output(1,True) 
    # else: 
    #  GPIO.output(1,False) 

    # MMM7=int(Sensor2[9:10]) 
    # if M0==1: 
    #  GPIO.output(1,True) 
    # else: 
    #  GPIO.output(1,False) 


     #import time 
     #time.sleep(1) 

     #GPIO.cleanup() 



def main(): 
    import time 
    while True: 
     try: 
      core() 
     except: 
      continue 
     time.sleep(0.01) 



main() 

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

Спасибо

+0

У вас есть два 'while True' утверждения там, и ничего не вырваться из них (кроме исключения). Вы уверены, что когда вы его перезагрузите, старый все еще не работает ваш нижний 'while True' каждые 10 мс? – SiHa

+0

правду я не могу сказать. Но вы можете быть правы. Итак, каков правильный способ прекратить выполнение скрипта, чтобы он не работал, даже если python idle gui, из которого я выполнил сценарий, был закрыт? –

ответ

0

Я подозреваю, что сценарий не закрывается, когда вы думаете. Очевидный способ проверить это - увидеть, все еще работает pythonw.exe в диспетчере задач.

Чтобы быть действительно, на самом деле, что вы можете создать файл в «продолжить» блок вашего try/except:

with open('filepath\file.txt','w') as myfile: 
    pass 

Затем, когда вы думаете, что вы убили сценарий, удалите этот файл и посмотреть, если он возвращается. Вам нужно увеличить тайм-аут до 1 с или так, чтобы не наводнять систему запросами на создание файлов.

Две вещи, чтобы попробовать первый, хотя:

  • Избавиться от while True в верхней части core(), это кажется ненужным
  • Уменьшите частоту вашего цикла вызова, чтобы, скажем, раз или два раза в секунду
+0

Почему я должен избавиться от истины? Я бы хотел, чтобы моя программа выполнялась непрерывно, она должна снова запускать xml с самого начала, чтобы проверить, что-то изменилось. Или сам цикл сценария python без каких-либо изменений является истинным или условием? –

+0

Ну, у вас их двое. Один из них внизу, который будет вызывать 'core()' каждые 100 мс, а другой в самом ядре() (self), который заставит этот цикл работать непрерывно, если он не попадает в исключение. Непрерывный интенсивный процессор, в то время как петли являются одной из причин системы замедления. Я предлагал это как шаг для подкупа, не более того. – SiHa

+0

Ты, я пропустил это! :-) –

Смежные вопросы