我有很多图片,除了文件名之外,其中一些是完全相同的,目前我通过计算每个图片的MD5对它们进行分组,但是对它们进行散列看起来很慢。有没有其他方法可以让它更快?如果我在哈希之前调整图像大小会有帮助吗?
答案 0 :(得分:1)
您可以按[filesize, partial hashcode]
分组文件,"部分哈希码"是(例如)文件中的一些[N, filesize].min
字节块的散列(例如,在文件的开头或结尾)。当然,N
的选择会影响两个不同文件组合在一起的概率,但如果创建错误分组的概率和/或成本足够小,那么这可能是可以接受的。
答案 1 :(得分:0)
workers = 4 # >= number of CPU cores
file_groups = Dir['/path/to/pic/folder/*'].each_with_index.group_by{|filename, i| i % workers}.values
file_groups.each do |group|
fork do
group.each do |filename, _|
# MD5 the file
end
end
end
Process.waitall
workers = 4 # >= number of CPU cores
file_groups = Dir['/path/to/pic/folder/*'].each_with_index.group_by{|filename, i| i % workers}.values
threads = file_groups.map do |group|
Thread.new do
group.each do |filename, _|
# MD5 the file
end
end
end
threads.each(&:join)