Harmonogram Dask pusty / wykres się nie wyświetla

Nov 19 2020

Mam następującą konfigurację:

# 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()

Ta logika została zapożyczona od Luigi i dobrze współpracuje z instrukcjami if, aby kontrolować, jakie zadania mają być uruchamiane.

Jednak niektóre zadania ładują duże ilości danych z SQL i powodują ostrzeżenia o zamrożeniu GIL (przynajmniej takie jest moje podejrzenie, ponieważ trudno jest zdiagnozować, która dokładnie linia powoduje problem). Czasami wykres / monitorowanie pokazane na 8787 nic nie pokazuje scheduler empty, podejrzewam, że jest to spowodowane zamarzaniem aplikacji. Jaki jest najlepszy sposób ładowania dużych ilości danych z SQL w dask. (MSSQL i Oracle). W tej chwili jest to zrobione sqlalchemyz dostrojonymi ustawieniami. Dodałby asynci awaitpomógł?

Jednak niektóre zadania są nieco powolne i chciałbym użyć takich rzeczy jak dask.dataframelub bagwewnętrznie. Lekarze odradzają dzwonienie z opóźnieniem w środku. Czy to dotyczy również dataframei bag. Cały skrypt jest uruchamiany na jednej 40-rdzeniowej maszynie.

Używając bag.starmapotrzymuję taki wykres:

gdzie górne linie proste są dodawane / odkrywane po osiągnięciu tego zadania przez obliczenia i wywoływane są w nim obliczenia.

Odpowiedzi

ic_fl2 Nov 24 2020 at 10:15

Wygląda na to, że nie ma rymu ani powodu innego niż maszyna była / jest bardzo zajęta i stara się wyświetlać aktualizacje stanu i wykresy bokeh zgodnie z życzeniem.