Python многопроцессорная обработка файлов каталогов с общим счетчиком - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в Python и пишу сценарий, который получает единственный аргумент имени каталога и рекурсивно возвращает список всех файлов в указанном каталоге вместе с их MD5HA SH.

Скрипт использует многопроцессорность для большей эффективности.

Я бы хотел, чтобы результат выглядел так: «FileCounter, FileName, MD5HA SH ...»

Единственная часть, которая, похоже, не работает, - это счетчик - Несмотря на то, что я использую блокировку значений, как предлагается в некоторых сообщениях здесь, порядок все еще время от времени перемешивается (например, 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)

Хотелось бы знать, что я здесь делаю не так. Спасибо!

...