Ankündigung

Einklappen
Keine Ankündigung bisher.

Absturz wegen Exception in Pythons asyncore

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Absturz wegen Exception in Pythons asyncore

    Hallo Marcus,

    nachdem sh.py in Kombination mit dem Russound Plugin monatelang geschnurrt hat wie ein Kätzchen ist mir heute Nacht sh.py bei der zweistündlichen Reconnect Orgie zum Russound abgestürtzt. Im Log finde ich folgende Meldung:

    Code:
    2013-02-13 00:10:58 SmartHome.py INFO     Russound: connection to 192.168.178.45:9621 closed
    2013-02-13 00:11:08 sh.con       INFO     Russound: connected to 192.168.178.45:9621
    [COLOR="Red"]2013-02-13 00:11:08 SmartHome.py INFO     Russound: connected to 192.168.178.45:9621[/COLOR]
    2013-02-13 00:11:08 SmartHome.py CRITICAL Unhandled exception: (9, 'Bad file descriptor')
    <class 'select.error'>
      File "bin/smarthome.py", line 456, in <module>
        sh = SmartHome()
      File "bin/smarthome.py", line 238, in __init__
        asyncore.loop(timeout=1, count=1, map=self.socket_map)
      File "/usr/lib/python2.7/asyncore.py", line 220, in loop
        poll_fun(timeout, map)
      File "/usr/lib/python2.7/asyncore.py", line 145, in poll
        r, w, e = select.select(r, w, e, timeout)
    Komisch dabei finde ich die zweite INFO Ausgabe von "SmartHome.py" (oben in rot). Normalerweise steht immer nur folgendes in den Logs:

    Code:
    2013-02-12 06:43:18 SmartHome.py INFO     Russound: connection to 192.168.178.45:9621 closed
    2013-02-12 06:43:23 sh.con       INFO     Russound: connected to 192.168.178.45:9621
    Eine erste Recherche auf Google brachte diverse Möglichkeiten, von nicht threadsicheren Methoden von asyncore über das richtige Schließen einer Connection in der handle_close. Leider ist dazu mein Fieber heute zu hoch, um mich noch näher damit zu beschäftigen. Würde mich freuen, wenn du dir das mal ansehen könntest. Ich krabbel jetzt wieder ins Bett
    Mit freundlichen Grüßen
    Niko Will

    Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
    - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

    #2
    Hallo Niko,

    erst einmal gute Besserung! Ich habe mir den Code mal angesehen und denke das Problem gefunden zu haben.

    In Deinem Russound Plugin steht:
    Code:
    164     def _send_cmd(self, cmd):                                                   
    165         logger.debug("Sending request: {0}".format(cmd))                        
    166                                                                        
    167         # if connection is closed we don't wait for sh.con to reopen it         
    168         # instead we reconnect immediatly                                       
    169         if not self.is_connected:                                               
    170             self.connect()
    Das kann zu mehreren Connection-Versuchen zu selben Zeit führen. Deswegen gab es wahrscheinlich die Exception.

    Ich habe in die MyAsynchat folgendes (für Dich) eingebaut:

    Code:
     49     def connect(self):                                                          
     50         self._conn_lock.acquire()                                               
     51         if self.is_connected:  # only allow one connection at a time            
     52             logger.debug("Don't be hasty. Reduce connection attempts from: {0}".format(self.__class__.__name__))
     53             self._conn_lock.release()                                           
     54             return

    Bis bald

    Marcus

    Kommentar


      #3
      Absturz wegen Exception in Pythons asyncore

      Hallo Marcus,

      Danke fürs drüber schauen und die Änderung. Allerdings kommt mir das komisch vor, denn der von dir gepostete Code aus dem Plugin wird nur beim Senden eines Kommandos ausgeführt. Zu der Zeit des Absturzes haben aber alle geschlafen und auch das Log drum rum zeigt keine Aktivität die das Senden eines Kommandos auslösen würde.
      Mit freundlichen Grüßen
      Niko Will

      Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
      - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

      Kommentar


        #4
        Hi Niko,

        handle_connect -> _watch_system -> _send_cmd -> self.connect() -> goto handle_connect

        Ich hoffe Du hängst nicht beim lesen.

        Bis bald

        Marcus

        Kommentar


          #5
          Absturz wegen Exception in Pythons asyncore

          Hi Marcus,

          sollte is_connected dann nicht schon true sein, sodass connect() in _send_cmd gar nicht aufgerufen wird?
          Mit freundlichen Grüßen
          Niko Will

          Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
          - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

          Kommentar


            #6
            Hi Niko,

            das hast Du Recht. Den Fehler zu reproduzieren dürfte wahrscheinlich nicht einfach sein. Ich hoffe das er aber nicht mehr Auftritt.
            Meine Änderungen tragen hoffentlich dazu bei.

            Bis bald

            Marcus

            Kommentar


              #7
              Absturz wegen Exception in Pythons asyncore

              Hi Marcus,

              das dachte ich mir auch... danke dir trotzdem soweit. Vielleicht schau ich mir das nochmal an wenn ich wieder fitt bin.
              Mit freundlichen Grüßen
              Niko Will

              Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
              - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

              Kommentar

              Lädt...
              X