Dask Scheduler leer / Grafik nicht angezeigt

Nov 19 2020

Ich habe ein Setup wie folgt:

# etl.py
from dask.distributed import Client
import dask
from tasks import task1, task2, task3

def runall(**kwargs):
    print("done")


def etl():
    client = Client()

    tasks = {}
    tasks['task1'] = dask.delayed(task)(*args)
    tasks['task2'] = dask.delayed(task)(*args)
    tasks['task3'] = dask.delayed(task)(*args)

     out = dask.delayed(runall)(**tasks)
     out.compute()

Diese Logik wurde von luigi entlehnt und funktioniert gut mit if-Anweisungen, um zu steuern, welche Aufgaben ausgeführt werden sollen.

Einige der Aufgaben laden jedoch große Datenmengen aus SQL und verursachen GIL-Einfrierwarnungen (zumindest ist dies mein Verdacht, da es schwierig ist zu diagnostizieren, welche Zeile genau das Problem verursacht). Manchmal zeigt die Grafik / Überwachung auf 8787 nichts scheduler empty, ich vermute, dass diese durch das Einfrieren der App verursacht werden. Was ist der beste Weg, um große Datenmengen aus SQL in dask zu laden? (MSSQL und Orakel). Im Moment ist dies sqlalchemymit abgestimmten Einstellungen erledigt. Würde hinzufügen asyncund awaithelfen?

Einige Aufgaben sind jedoch etwas langsam und ich würde gerne Dinge wie dask.dataframeoder bagintern verwenden. Die Dokumente raten davon ab, einen verspäteten Anruf zu tätigen. Gilt das auch für dataframeund bag. Das gesamte Skript wird auf einem einzelnen 40-Kern-Computer ausgeführt.

Mit bag.starmapbekomme ich ein Diagramm wie folgt:

Dabei werden die oberen geraden Linien hinzugefügt / erkannt, sobald die Berechnung diese Aufgabe erreicht und die Berechnung darin aufgerufen wird.

Antworten

ic_fl2 Nov 24 2020 at 10:15

Es scheint keinen anderen Reim oder Grund zu geben, als dass die Maschine sehr beschäftigt war / ist und Schwierigkeiten hat, die Statusaktualisierungen und Bokeh-Diagramme wie gewünscht anzuzeigen.