这是参考Get MD5 hash of big files in Python and Hashlib in Windows and Linux
针对这两个问题,建议在函数 md5.update() 中使用更大的数据块来提高性能。
我所做的所有测试似乎都表明使用较小的块可以提供最佳性能。
考虑以下代码:
def test(factor):
filehash = hashlib.md5()
blk_size_to_read = filehash.block_size * (2**factor)
with open(largetestfile, 'rb') as f:
read_data = f.read(blk_size_to_read)
filehash.update(read_data)
filehash.digest()
if __name__ == '__main__':
for ctr in xrange(0, 12):
funcstr = "test({})".format(str(ctr))
timetaken = timeit.timeit(funcstr, setup="from __main__ import test", number = 5000)
print "Factor: {} Time: {}".format(str(ctr), str(timetaken))
Run Code Online (Sandbox Code Playgroud)
我所做的所有测试都表明,使用factor0 或 1(即 64 或 128 字节)时可实现最佳性能。
为什么我看到的结果与引用的问题中指出的结果不同?
我尝试过大小从 700MB …
以下代码的输出是
5
3
Run Code Online (Sandbox Code Playgroud)
我是Python新手,有人可以向我解释原因吗?
import sys
def Main():
str='1+2'
print eval(str)
class A:
def __init__(self):
self.x = 5
a = A()
print a.x
if __name__=="__main__":
Main()
Run Code Online (Sandbox Code Playgroud) 我有一个列表字典,每个列表都有不同数量的元素.我想将默认值添加到每个列表的开头,以使它们具有相同的大小.
所以,如果我从...开始
data = {'data1': [1,2,3], 'data2': [12,23,34,45,44], 'data3': [7,8,9,10], 'data4': [71, 72, 73, 74, 75, 76, 78], 'data5': []}
Run Code Online (Sandbox Code Playgroud)
我想最终得到:
data1: [0, 0, 0, 0, 1, 2, 3]
data2: [0, 0, 12, 23, 34, 45, 44]
data3: [0, 0, 0, 7, 8, 9, 10]
data4: [71, 72, 73, 74, 75, 76, 78]
data5: [0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)
我想出了以下代码:
maxlen = 0
for d in data:
if maxlen < len(data[d]):
maxlen = len(data[d])
for d in data: …Run Code Online (Sandbox Code Playgroud)