首页 > 解决方案 > 使用共享计数器对目录文件进行 Python 多处理

问题描述

我是 Python 新手,正在编写一个脚本,该脚本接收单个目录名称参数,并递归地返回所述目录中所有文件的列表及其 MD5HASH。

该脚本利用多处理来提高效率。

我希望输出看起来像这样:“FileCounter, FileName, MD5HASH...”

唯一似乎不起作用的部分是计数器 - 尽管我使用这里的一些帖子所建议的值锁定,但订单仍然不时被打乱(即 1、2、3、6、4 ,6 而不是 1,2,3,4,5,6)。

这是我的代码:

#!/usr/bin/python
from multiprocessing import Pool,Value
import sys
import os
import hashlib
from time import sleep

counter = Value('i',0)

def md5gen (filePath):
        global counter
        with counter.get_lock():
                counter.value += 1
        print str(counter.value)+","+filePath+","+hashlib.md5(filePath).hexdigest()

# Check argument
if len(sys.argv) < 2:
        print "No folder specified!"
        quit()

folderName = sys.argv[1]
if not os.path.exists(folderName):
        print "Not a valid folder!"
        quit()

fileNames = []
for subdir,dirs,files in os.walk(folderName):
        for file in files:
                filePath = subdir + os.sep + file
                fileNames.append(filePath)

p = Pool()
p.map(md5gen,fileNames)

真的很想知道我在这里做错了什么。谢谢!

标签: pythonlinuxmultithreadingmultiprocessingshared-memory

解决方案


推荐阅读