带有 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。如果我降低内存限制,那么程序将 运行 成功!
我正在使用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。如果我降低内存限制,那么程序将 运行 成功!