Ich stehe vor einem Problem, das leicht zu lösen sein sollte, aber ich fühle, dass ich im Dunkeln klopfe. Ich war einen einfachen Rahmen zu schreiben, die aus den folgenden Klassen bestehen:Wie kann QThreadPool für mehrere umfangreiche Rechenaufgaben verwendet werden?
Zuerst gibt es eine Algorithmus-Klasse, die einfach numerisches Verfahren enthält:
class Algorithm(object):
.
.
.
@staticmethod
def calculate(parameters):
#do stuff
return result
Dann gibt es ein Element der Klasse, die Pfade zu Dateien hält, Dienstprogramm und Statusinformationen. Ein Arbeiter Klasse Subklassen QRunnable:
class Worker(QRunnable):
def __init__(self,item,*args,**kwargs):
self.item = item
def run(self,*args,**kwargs):
result = Algorithms.calculate(items.parameter)
item.result = result
Und in einer Manager-Klasse werden die Prozesse
class Manager(object):
def __init__(self,*args,**kwargs):
self.pool = QThreadPool()
self.pool.setMaxThreadCount(4)
self.items = [item1,item2,...]
def onEvent(self):
for i in self.items:
self.pooil.start(item.requestWoker()) #returns a worker
nun das Problem begann: Nachdem Sie das getan merke ich, 2 Dinge:
- Die Arbeit ist nicht schneller (sogar ein bisschen langsamer), dann tun Sie es mit 1 Thread
- Die Elemente erhalten die gleichen Ergebnisse zugewiesen! Zum Beispiel wird Ergebnis A, welches das korrekte Ergebnis für Gegenstand A ist, allen Gegenständen zugewiesen!
Ich konnte hier nicht viel Doku finden, also wo bin ich falsch gelaufen?
Alles Gute Twerp
Sag Hallo zu deinem neuen Freund Gil: https://wiki.python.org/moin/GlobalInterpreterLock –