Dask распределен явно не освобождая память при завершении задачи - PullRequest
2 голосов
/ 08 июля 2019

Я пытаюсь выполнить пользовательский граф dask в распределенной системе, дело в том, что он, кажется, не освобождает память о законченных задачах.Я что-то не так делаю?

Я пытался изменить количество процессов и использовать локальный кластер, но, похоже, это не имеет значения.

from dask.distributed import Client
from dask import get
import pandas as pd

client = Client()

def get_head(df):
    return df.head()

process_big_file_tasks = {f'process-big-file-{i}': (pd.read_csv, '/home/ubuntu/huge_file.csv') for i in range(50)}
return_fragment_tasks = {f'return-fragment-{i}': (get_head, previous_task) for i, previous_task in enumerate(process_big_file_tasks)}

dsk = {
    **process_big_file_tasks,
    **return_fragment_tasks,
    'concat': (pd.concat, list(return_fragment_tasks))
}

client.get(dsk, 'concat')

Поскольку задачинезависимо друг от друга (или, по крайней мере, от тех, которые занимают больше всего памяти), когда каждый заканчивает работу, его память должна быть освобождена.

1 Ответ

0 голосов
/ 19 июля 2019

Как вы определяете, что он не освобождает память?Я рекомендую взглянуть на панель инструментов Dask, чтобы увидеть структуру вычислений, включая то, что было выпущено, а что нет.Это видео на YouTube может быть полезным

https://www.youtube.com/watch?v=N_GqzcuGLCY

В частности, я рекомендую вам просматривать вкладку График во время выполнения вычислений.

...