Página 8 de 8

Re: Versión mediaserver

Publicado: 09 Dic 2016, 19:14
por Lortropic
El uso de CPU en los menús me lo he cargado poniendo dentro de html.py unos simples:

Código: Seleccionar todo

      while self.get_data(ID) == None:
        time.sleep(SLEEP_INTERVAL)
        pass
Aunque lo más limpio sería hacer un sistema bloqueante, pero esto ya deja la CPU al 0% y es rápido de poner.

Ahora bien, esto creo que oculta otro problema, el que yo he comentado, ya que aun usando el 100% de CPU el sistema se comporta bien: "Espero un input: 100%" me lo das y bajo. Que al guardar la config se quede al 100% indica que hay algo que se queda enganchado (y supongo que con este "cambio" se queda enganchado pero haciendo time.sleep() )

Re: Versión mediaserver

Publicado: 09 Dic 2016, 19:16
por divadr
Bueno... pues le pongo el sleep y lo reviso..

Re: Versión mediaserver

Publicado: 09 Dic 2016, 19:21
por Lortropic
El problema creo que está aquí:

Código: Seleccionar todo

      while True:
        while self.get_data(ID) == None:
          time.sleep(SLEEP_INTERVAL)
          pass
        data = self.get_data(ID)
        self.controller.data = {}

        if type(data) == dict:
          JsonData["action"]="HideLoading"
          JsonData["data"] = {}
          self.send_message(JsonData)
        
          for v in data:
              if data[v] == "true": data[v] = True
              if data[v] == "false": data[v] = False
              if unicode(data[v]).isnumeric():  data[v] =  int(data[v])
            
          if not callback:
            for v in data:
              config.set_setting(v,data[v],channelname)
          else:
            exec "from channels import " + channelname + " as cb_channel"
            exec "return_value = cb_channel." + callback + "(item, data)"
            return return_value

        elif data == "custom_button":
          try:
              cb_channel = __import__('channels.%s' % channelname, None, None, ["channels.%s" % channelname])
          except ImportError:
              logger.error('Imposible importar %s' % channelname)
          else:
            return_value = getattr(cb_channel, custom_button['function'])(item)
            if custom_button["close"] == True:
              return return_value
        
        elif data == False:
          return None
Hay un bucle infinito. Se leen datos. Si data == False, return None, así que se sale.

Ahora bien, si lee datos hay caminos sin return.
Si es dict, entra en el primer if, y si no tiene callback,

Código: Seleccionar todo

if not callback:
            for v in data:
              config.set_setting(v,data[v],channelname)
          else:
No hay return en el if

En el primer else ocurre lo mismo, hay un caso sin return.

Re: Versión mediaserver

Publicado: 09 Dic 2016, 19:45
por Lortropic
Bueno, yo lo dejo aquí por ahora :lol:

Adjunto mi "html.py" funcionando consumiendo menos CPU, pero no arreglando lo del bloqueo (se puede reproducir poniendo SLEEP_INTERVAL = 0)

Re: Versión mediaserver

Publicado: 11 Dic 2016, 20:19
por Lortropic
Bastante mejor el uso de cpu :roll:

http://imgur.com/PXvf2g2