Hallo zusammen!
Ich hatte jüngst ein interessantes Telefonat mit einem Dreambox-Entwickler. Er meinte sinngemäß, zur Entwicklung von Plugins sollten zwecks Stabilität keine Python-Threads benutzt werden. Deswegen schreibe ich nun alle meine Plugins so um, dass sie mit Timern und Callback-Funktionen laufen. Dabei stelle ich aber ein Problem fest:
Wenn das Plugin mit SESSIONSTART gestartet wird, arbeitet der Timer nach ein paar Sekunden nicht mehr. Er wird offensichtlich während des Bootvorganges bereits gekillt. Wenn ich den selben Code z. B. mit EXTENSIONSMENU über ein Menü aufrufe, läuft der Timer einwandfrei.
Wie kann ich das umgehen (ohne Threads wohlgemerkt)? Oder gibt es andere Techniken?
Hier ein bisschen Quellcode:
Python
# -*- coding: cp1252 -*-
from enigma import eTimer
from Plugins.Plugin import PluginDescriptor
def Plugins(**kwargs):
return PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = autostart)
# return PluginDescriptor(name="Popup-Plugin", description="Popup-Plugin",
# where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc = autostart)
def autostart(**kwargs):
if "session" in kwargs:
session = kwargs["session"]
try:
popup = Popup(session)
except:
print "Popup: error starting popup plugin!"
class Popup():
def __init__(self, session):
self.session = session
[...]
self.myTimer = eTimer()
self.myTimer.callback.append(self.blupp)
self.myTimer.start(100)
def blupp(self):
print "############ TEST TEST TEST TEST TEST TEST TEST TEST #############"
Alles anzeigen