让我们假设我有一个节点,它具有无限数量的CPU和无限的I / O资源。我想编写一个使用多重处理并计算给定路径和所有子目录中文件总数的python脚本
示例:
我运行一个脚本,该脚本会在给定路径中生成数百万个文件:
#!/usr/bin/env bash
NUMDIRS=300000
NUMFILES=10
myPath="/tmp/test"
echo "Working on path: $myPath"
for directory in `seq 1 $NUMDIRS`
do
mkdir -p "$myPath/$directory"
cd $myPath/$directory
for file in `seq 1 $NUMFILES`
do
touch "file_$file.txt"
echo "Path: $myPath/$directory" >> file_$file.txt
echo "Filename: file_$file.txt" >> file_$file.txt
echo "Created on: `date +"%Y%m%d-%H%M%S"`" >> file_$file.txt
done
done
即使这不是使用多处理的最佳示例,仅出于学习目的,我也想知道如何编写python代码以使用多处理并按照提供的示例返回3000000(300000个目录x 10个文件)每个目录)。
编辑: 第一种失败的方法:
#!/usr/bin/env python3
import os
import multiprocessing
path = "/tmp/test"
def count_single_process(path):
cpt = sum([len(files) for r, d, files in os.walk(path)])
return cpt
def walkingThePath(path):
for r, d, f in os.walk(path):
return len(f)
def main():
cpu_number = multiprocessing.cpu_count()
with multiprocessing.Pool(cpu_number) as Pool:
print(Pool.map(walkingThePath, path))
if __name__ == '__main__':
main()