python-如何使用多重处理递归计算路径中的文件数

时间:2018-07-19 18:29:34

标签: python multiprocessing

让我们假设我有一个节点,它具有无限数量的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()

0 个答案:

没有答案