我目前正在研究MapReduce算法,我需要更好地构建我的数据源。该程序用于给出在哈希算法中使用的随机数列表,以找到“好”(低值)哈希值;与比特币非常相似。现在我制作一个包含4000万个连续数字(nonce)的列表。但IO中的开销(使用mincemeat.py)使程序变得非常慢。
目前我正在使用它创建我的列表
#Build the data source
nonces = [i for i in range(0, 400000)]
#Create a dict with a single entry
datasource = dict(enumerate(nonces))
如何更改第一行代码以创建大小为40的列表,其中包含大小为100万的列表;所以第一个列表是1-1mil,然后是1mil到2mil等等?我是否需要分解并制作for循环,或者是否有一个简单的衬垫我可以实现这个?
以下是我如何实现for循环来实现它,它可以被浓缩吗? (我知道我有重复的数字..)
nonceList = []
for j in range(0, 40):
nonceList.append([i for i in range(j*1000000, (j+1)*1000000)])
datasource = dict(enumerate(nonceList))
答案 0 :(得分:2)
不要预先产生连续的数字;只需让你的mapreduce任务从起始编号生成它们。
E.g。对于40个任务,编号为0-40并使用乘数在任务中生成数字;在Python 2中,使用xrange()
生成数字,因为range()
将生成一个列表,实现一百万个整数对象,无法获得。