2016-05-26 9 views
1

Zu diesem dask Code Brennen:eine Sequenz von parallelen Aufgaben

def inc(x): 
    return x + 1 

for x in range(5): 
    array[x] = delay(inc)(x) 

Ich möchte alle Elemente in array zuzugreifen, indem die verzögerten Aufgaben ausführt. Aber ich kann array.compute() nicht anrufen, da array keine Funktion ist. Wenn ich

tun
for x in range(5): 
    array[x].compute() 

dann tut jede Aufgabe parallel ausgeführt wird oder erst nach a[0] beendet gefeuert hat a[1] zu erhalten? Gibt es eine bessere Möglichkeit, diesen Code zu schreiben?

+0

mein Kommentar ich die Frage löschen falsch verstanden. –

Antwort

0

Es ist leicht zu sagen, ob die Dinge parallel ausgeführt werden, wenn sie gezwungen werden, lange zu dauern. Wenn Sie diesen Code ausführen:

Es wird sehr offensichtlich, dass die Aufrufe nacheinander erfolgen. Allerdings, wenn Sie die letzte Schleife mit diesem ersetzen:

dann können Sie sehen, dass sie parallel sind. Auf meinem Rechner sieht die Ausgabe so aus:

[inc(1): 1.00373506546] 
[inc(4): 1.00429320335] 
[inc(2): 1.00471806526] 
[inc(3): 1.00475406647] 
[inc(0): 2.00795912743] 

Offensichtlich waren die ersten vier Aufgaben, die es ausführte, parallel. Vermutlich wird die Standardparallelität auf die Anzahl der Kerne auf der Maschine gesetzt, da es für CPU-intensive Aufgaben im Allgemeinen nicht sinnvoll ist, mehr zu haben.

+0

@JRR aktualisierte meine Antwort. Ich schlage vor, Sie verwenden MRocklins Antwort, weil es eher wie eine legitimere Methode aussieht, aber denselben Test durchführt. –

1

können Sie verwenden, um die dask.compute Funktion auf einmal viele verzögerte Werte berechnen

from dask import delayed, compute 

array = [delayed(inc)(i) for i in range(5)] 
result = compute(*array) 
Verwandte Themen