带有 tls 连接的 Dask 无法使用 to_parquet 方法结束程序

Dask with tls connection can not end the program with to_parquet method

我正在使用dask处理10个文件,每个文件的大小约为142MB。我构建了一个带有延迟标签的方法,下面是一个例子:

@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后就黄了。我正确地知道程序 运行s,因为我可以在一段时间后看到所有输出文件。 但是程序永远不会停止。如果我禁用 tls,程序可以 运行 成功。 如果我启用 tls 连接,dask 无法停止程序,这太奇怪了。我该如何解决?


我发现如果我添加 to_parquet 方法,程序就不能停止,而如果我删除方法,它 运行 成功。

我找到问题了。我为每个进程设置了 10GB。这意味着我设置了 memory-limit=10GB。我一共设置了2个worker,每个worker有2个进程。每个进程有 2 个线程。 因此,每台机器将有 4 个进程,占用 40GB。但是,我的机器只有 32GB。如果我降低内存限制,那么程序将 运行 成功!