在保存内存的同时生成无限的字母组合流?

时间:2014-05-15 03:43:17

标签: python string memory memory-management itertools

我正在尝试编写一个程序,以不同的组合逐个生成字符串(从“a”开始到“zzzzzz *”结束)并将字符串转换为哈希值,然后检查哈希值以与另一个哈希值进行比较。我目前正在使用itertools来完成任务,但它似乎会生成一个相当大的字符串列表,并在处理之前将它们全部存储在内存中。

在命令行中运行以下代码约5分钟时,命令行本身占用超过4GB的内存,我相信可以大大减少。

我想要做的是1)一次生成一个字符串而不是数组,2)以这样的方式管理内存,因为在我使用该字符串后,它会从内存中移除,或者手动删除或通过垃圾收集器。我怎么能做到这一点?

#!/bin/env/python
import itertools
import string
import hashlib

def stringGen(charset, maxlength):
    return (''.join(candidate)
        for candidate in itertools.chain.from_iterable(itertools.product(charset, repeat=i)
        for i in range(1, maxlength + 1)))
i=0        
for attempt in stringGen(string.ascii_lowercase, 10):
    i+=1
    aHash = hashlib.sha256(attempt).hexdigest()
    print attempt
    print aHash + " " + str(i) + "\n"
    if aHash == hashlib.sha256("longword").hexdigest():
        print "matched" 
        break

0 个答案:

没有答案