python - 使用共享计数器对目录文件进行 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)
真的很想知道我在这里做错了什么。谢谢!
解决方案
推荐阅读
- r - 使用 Safely from Purrr 时调试功能?
- javascript - 将数组转换为给定类型的对象数组
- python - 如何解决单选按钮的问题?
- google-oauth - Google Data Studio OAuth 客户端验证 - 在我们的应用内测试视频中显示什么?
- http - 使用 http4s 从 http 更改为 https
- c# - 如何在 C# 中添加 dll 引用而不会出现问题?
- bintray - bintray 如何或何时重置上传限制?(免费版)
- android - ionic5 电容器应用程序适用于较低版本的 android 7、8 但不适用于 android 10
- reactjs - 组件具有 props 作为函数, containsMatchingElement 返回 false
- r - 如何在R中绘制大量数据