from itertools import product, islice
from multiprocessing import Pool
def crack(list_of_tuples):
for letters in list_of_tuples:
password = ''.join(letters)
success = try_to_crack(password)
if success:
print('password is {}'.format(password))
break
tuples = product('abcdefghijklmnoprstuvyzwxq1234567890_', repeat=10)
size_of_slice = 5000
number_of_processes = 8
running = True
while running:
p = Pool(number_of_processes)
slices = []
for i in range(number_of_processes):
l = list(islice(tuples, size_of_slice))
if l:
slices.append(l)
else:
running = False
p.map(crack, slices)
不要创建排列的“列表”。 “permutations”调用是一种特殊的构造,tat将一次生成一个置换,其思想是使用它,然后检索下一个值。在
当你这么做的时候
您希望一次将所有值记录在内存中—在本例中这是不够的。在
作为一个旁注-如果你真的一次产生一个排列,你将耗尽内存,但你,你的计算机,太阳系和整个宇宙将耗尽时间。在
升级版:
首先,如果您想从这个字母表中获取所有可能的密码,您应该使用来自}。在
itertools
模块的product
函数,而不是{另外,如果您想提高执行速度,您应该使用
multiprocessing
模块而不是threading
。在你可以通过这种方式实现你的目标,例如:
另请参见multiprocessing-vs-threading
原始答案:
不要创建列表,只需按原样使用:
^{pr2}$相关问题 更多 >
编程相关推荐