Dask с подключением tls не может завершить программу методом to_parquet - PullRequest
0 голосов
/ 08 мая 2020

Я использую dask для обработки 10 файлов, размер каждого из которых составляет около 142 МБ. Я создаю метод с отложенным тегом, следующий пример:

@dask.delayed
def process_one_file(input_file_path, save_path):
   res = []
   for line in open(input_file_path):
       res.append(line)
   df = pd.DataFrame(line)
   df.to_parquet(save_path+os.path.basename(input_file_path))

if __name__ == '__main__':
    client = ClusterClient()
    input_dir = ""
    save_dir = ""
    print("start to process")
    cvss = [process_one_file(input_dir+filename, save_dir) for filename in os.listdir(input_dir)]
    dask.compute(csvs)

Однако dask не всегда работает успешно. После обработки всех файлов программа часто зависает.
Я использовал командную строку для запуска программы. Программа часто выдает ошибку после печати start to process. Я знаю, что программа работает правильно, так как через некоторое время я могу видеть все выходные файлы. Но программа никогда не останавливается. Если я отключил tls, программа сможет успешно работать. Это было так странно, что dask не может остановить программу, если я включу tls соединение. Как я могу решить эту проблему?


Я обнаружил, что если я добавлю метод to_parquet, то программа не сможет остановиться, а если я удалю метод, она будет успешно работать.

1 Ответ

1 голос
/ 09 мая 2020

Я нашел проблему. Я установил 10 ГБ для каждого процесса. Это означает, что я установил memory-limit=10GB. Я полностью установил 2 воркера, у каждого по 2 процесса. Каждый процесс имеет 2 потока. Таким образом, на каждой машине будет 4 процесса, занимающих 40 ГБ. Однако на моей машине всего 32 ГБ. Если я уменьшу лимит памяти, то программа будет успешно работать!

...