使用共享计数器对目录文件进行Python多处理

2024-09-30 02:32:27 发布

您现在位置: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)

我很想知道我做错了什么。 谢谢大家!


Tags: fromimport脚本valueossyscounterhashlib

热门问题