ich bin zurzeit dabei mich in das Thema Threading einzuarbeiten. Konkret arbeite ich an einem Offline-RSS-Reader. Dazu hab ich eine Update-Routine geschrieben, die verschiedene Update-Möglichkeiten (Alle Seiten / Eine Seite - Alle Kategorien / Eine Seite - Eine Kategorie) durchgeht. Die letzten beiden Punkte sind kein Problem, weil ich da immer nur einen Vorgang habe (also zum Beispiel die Funktion, die die Kategorien abruft), denn es ist eine Funktion und kein Thread. Nun zu meinem eigentlichen Problem:
Wenn ich jetzt alle Seiten aktualisiere (das geschieht in einem Thread, damit die Benutzeroberfläche nicht einfriert). Da es sich aber um Threads handelt, kann ich nicht einfach sagen Seite1.begin(), Seite2.begin().... da dann Python abstürzt wegen Überforderung
Deswegen überprüfe ich derzeit in if-Abfragen, ob der vorige Thread fertig ist und rufe dann den nächsten Thread auf. Da ich aber nicht immer alle Seiten aktualisieren will (weil der Nutzer sie beispielsweise deaktiviert hat) ist dieser Weg schlecht, aber der einzige der mir einfiel Dass die Seiten aufgerufen werden, ist zwar nicht schlimm, da die Kategorien von der Funktion nicht aktualisert werden, weil ich alle Kategorien der Seite deaktiviere, aber der Aufruf ist halt umsonst und umständlich, wenn ich das Programm von derzeit 4 Seiten auf x-Seiten erhöhen will.
Als Code sieht der fragliche Abschnitt derzeit so aus:
Code: Alles auswählen
def update(self):
....
if (fenster.ui.stackedWidget.currentIndex() == 0) and (kategorie == "none"):
starteSpiegel()
# Alle Seiten werden geupdatet, die erste Funktion wird aufgerufen, siehe weiter unten:
...
def starteSpiegel():
from setupSpiegel import updateSpiegelall
update_spiegel = updateSpiegelall("none","none")
update_spiegel.begin()
fenster.connect(update_spiegel, SIGNAL("finished()"), starteNTV)
def starteNTV():
from setupNTV import updateNTVall
update_ntv = updateNTVall("none","none")
update_ntv.begin()
fenster.connect(update_ntv, SIGNAL("finished()"), starteEngadget)
def starteEngadget():
from setupEngadget import updateEngadgetall
update_engadget = updateEngadgetall("none","none")
update_engadget.begin()
fenster.connect(update_engadget, SIGNAL("finished()"), starteMeego)
def starteMeego():
from setupMeego import updateMeegoall
update_meego = updateMeegoall("none","none")
update_meego.begin()
fenster.connect(update_meego, SIGNAL("finished()"), zeigeFertig)
def zeigeFertig():
fenster.ui.stackedWidget.setCurrentIndex(6)
Ich hoffe ich hab genug Infos geliefert, damit ihr mir helfen könnt.
MfG blck