Seite 1 von 1

Aktion aus For-Schleife?

Verfasst: Samstag 25. Juli 2009, 15:29
von shadow07
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?

Verfasst: Samstag 25. Juli 2009, 15:48
von nemomuk
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.

Verfasst: Samstag 25. Juli 2009, 16:02
von shadow07
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)

Verfasst: Samstag 25. Juli 2009, 16:09
von nemomuk
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)

Verfasst: Samstag 25. Juli 2009, 16:11
von BlackJack
Vielleicht ist der Algorithmus auch einfach nicht der beste!? Kann es sein, dass der quadratische Laufzeit hat?

Verfasst: Samstag 25. Juli 2009, 16:12
von nemomuk
@BlackJack: dann sollte aber trotzdem nicht die GUI einfrieren...

Verfasst: Samstag 25. Juli 2009, 16:17
von EyDu
Dem Code nach hast du eine Funktion ausgeführt, keinen neuen Thread gestartet. Das sind zwei verschiedene Dinge.

Verfasst: Samstag 25. Juli 2009, 16:23
von BlackJack
Ausserdem sind Threads und GUIs auch wieder ein Thema für sich. Die mögen sich oft nicht.