Ich habe einige Zeit damit verbracht, Multiprocessing zu verstehen, obwohl die Feinheiten sich meinem ungeübten Verstand entziehen. Ich habe es geschafft, einen Pool dazu zu bringen, eine einfache Ganzzahl zurückzugeben, aber wenn die Funktion nicht einfach ein Ergebnis zurückgibt, wie alle Beispiele, die ich finden kann (sogar in der Dokumentation Es handelt sich um ein obskures Beispiel, das ich nicht ganz verstehe.
Hier ist ein Beispiel, das ich gerade versuche, zum Laufen zu bringen. ABER, ich kann es nicht wie vorgesehen zum Laufen bringen, und ich bin sicher, es gibt einen einfachen Grund dafür. Möglicherweise muss ich eine Warteschlange oder einen gemeinsamen Speicher oder einen Manager verwenden, aber so oft ich auch die Dokumentation lese, kann ich mir keinen Reim darauf machen, was das eigentlich bedeutet und was es tut. Alles, was ich bis jetzt verstanden habe, ist die Pool-Funktion.
Außerdem verwende ich eine Klasse, da ich die Verwendung globaler Variablen wie in die Antwort auf diese Frage .
import random
class thisClass:
def __init__(self):
self.i = 0
def countSixes(myClassObject):
newNum = random.randrange(0,10)
#print(newNum) #this proves the function is being run if enabled
if newNum == 6:
myClassObject.i += 1
if __name__ == '__main__':
import multiprocessing
pool = multiprocessing.Pool(1) #use one core for now
counter = thisClass()
myList = []
[myList.append(x) for x in range(1000)]
#it must be (args,) instead of just i, apparently
async_results = [pool.apply_async(countSixes, (counter,)) for i in myList]
for x in async_results:
x.get(timeout=1)
print(counter.i)
Kann mir jemand erklären, was zu tun ist, damit ich endlich verstehe, was ich übersehe und was es bewirkt?
2 Stimmen
Wenn ich Ihre Frage noch einmal lese, verstehe ich jetzt, dass Sie dachten, die Verwendung einer Klasse würde die dieses Problem . Das wird es nicht. Wenn Sie wirklich Speicher zwischen Prozessen teilen wollen (wovon die Dokumentation selbst abrät!), dann müssen Sie
multiprocessing
die eingebauten Datentypen wie beschrieben aquí .