我正在编写文件比较功能。我知道filecmp.cmp
但是在我的数据集中,预计很多文件都是相同的,所以我想而不是将每个潜在的匹配相互比较,最好实现多文件比较,一次比较它们。 (另外,因为我是python的新手,所以我认为这是一个很好的学习练习。)它似乎正在进行O.K.到目前为止,实际上有一些输入它比unix的cmp
更快(实际上让我有点担心,因为我不太相信这是可能的,因此认为我的实现可能有问题!)
所以,我编写了代码,但我现在正在尝试确定每次读取的理想块大小。我的一部分认为所检索的数据都必须进行比较,因此,我一次进入内存的越多越好,但我想知道是否存在可能影响上述内容的python数据结构的局限性。例如,我正在维护可能很大的块列表并使用字典,其中键是读取块。
那么,我应该在python内置数据结构中注意哪些可能会影响这一点,或者这只是由硬件决定的,应该通过在特定机器上进行性能分析来确定?
读回来我意识到这不是最明确的问题,但是(尽管有尝试)我不知道如何澄清它。我很高兴发布我的代码,如果这将使事情更清楚,但它比你的平均代码样本(虽然不是太糟糕)有点长。如果需要进一步澄清,请评论。
感谢。
更新Re。 SHA1: 我只在2个相同的输入文件上测试了我的算法与SHA1(实际数据中预计会有更多),每次运行100次。我意识到这不是一个彻底的测试,但结果是不同的,值得评论。
(在任一测试期间,计算机都没有任何其他负载,尽管我在评论中说过,这不是在目标机器上运行,但是它运行在具有相当合理规格的机器上。测试有可能在两个线程中运行;即SHA1发生在两个线程中,并且为我的两个线程启动但是由于实现,只有一个线程被使用。单线程SHA1版本需要更长时间。两个测试都读取一次大小相同的块。给出了三组结果。)
现在我很困惑。评论(重新SHA1)是对的吗?因此,这表明实施错误还是其他事情发生了?
SHA1:
real 5m35.865s 6m17.737s 5m57.010s
user 10m18.963s 11m34.178s 10m58.760s
sys 0m47.030s 0m52.707s 0m47.807s
矿:
real 3m47.185s 4m31.548s 4m40.628s
user 2m47.849s 3m26.207s 3m36.013s
sys 0m59.193s 1m5.139s 1m4.406s
答案 0 :(得分:3)
我建议您使用binary search方法来选择尺寸值。
从一个较大的值(一个你知道太大的值)开始并减少一半。如果它更快,再将它减半。如果速度较慢,请转到下一半间隔。继续,直到达到最佳值。