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
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
http://imgur.com/PXvf2g2