Aktion aus For-Schleife?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

folgende Schleife wird abgearbeitet:

Code: Alles auswählen

        for tag in self.erste.erste_list:
            global erste_zahl
            erste_zahl += 1
            grap = searchgrap(erste)
            grap.search_zweite(self.suchwort)
            for tag in grap.zweite_list:
                test = Test_a(str(tag['Name']))
                self.list.append(test)
                #hier brauch ich eine Ausgabe der bisherigen Liste
        self["testlist"].buildList_tester(self.list)
da die innere Schleife aber xml parst, dauert die ganze Aktion locker mal 12min.
Also suche ich nach einer Möglichkeit, die Liste jedesmal nach einem Durchlauf der inneren Schleife auszugeben, die GUI reagiert aber erst wenn alles abgearbeitet ist

ein Auslagern der inneren Schleife in eine eigene Methode hats auch nicht gebracht

oder lässt sich das ganz anders lösen?
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Du solltest die Berechnung in einen eigenen Thread auslagern. Allerdings halte ich es für Unsinn die komplette Liste neu auszugeben, sondern die neuen Elemente hinzuzufügen.
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

Du solltest die Berechnung in einen eigenen Thread auslagern
hatte ich ja probiert, hat aber anscheinend auch nichts gebracht -oder ich habe es falsch gemacht(?)

Code: Alles auswählen

    def searchList(self, suchwort):

        a_suchwort = suchwort
        self.list=[]
        for tag in self.erste.erste_list:
            self.list=self.startOne(a_suchwort,erste,self.list)
        self["testlist"].buildList_tester(self.list)


    def startOne(self,suchwort,erste,list):

        for tag in self.erste.erste_list:
            #global erste_zahl
            #erste_zahl += 1
            grap = searchgrap(erste)
            grap.search_zweite(self.suchwort)
            for tag in grap.zweite_list:
                test = Test_a(str(tag['Name']))
                self.list.append(test)
        #self["testlist"].buildList_tester(self.list)
        return self.list
mein Problem ist, das ich es nicht schaffe, nach einem Durchlauf der inneren Schleife (oder hier startOne) eine Ausgabe zu bekommen, Ausgabe bekomme ich erst wieder wenn alles abgearbeitet ist (das ganze Programm wartet praktisch, angestoßen wird die Schleife mit einer InputBox, die bleibt eisern stehen bis alles fertig ist)
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Wo und wie hast du das probiert? Mehr Code wäre definitiv hilfreich... Welches GUI-Toolkit? (der kurze Code-Ausschnitt hier ist auch nicht wirklich schön)
BlackJack

Vielleicht ist der Algorithmus auch einfach nicht der beste!? Kann es sein, dass der quadratische Laufzeit hat?
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

@BlackJack: dann sollte aber trotzdem nicht die GUI einfrieren...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dem Code nach hast du eine Funktion ausgeführt, keinen neuen Thread gestartet. Das sind zwei verschiedene Dinge.
Das Leben ist wie ein Tennisball.
BlackJack

Ausserdem sind Threads und GUIs auch wieder ein Thema für sich. Die mögen sich oft nicht.
Antworten