<p>创建一个用置换填充列表的生成器线程,以及从列表中获取值并对其进行测试的多个其他线程:</p>
<pre><code>from time import sleep
from threading import Thread
queue = []
done = False
num_consumers = 10
def generate():
#the generator - fill queue with values and set a flag when done
global queue, done
for val in permutations(allc, num):
if len(queue) > 100:
sleep(0.5)
continue
queue.append(val)
done = True
def consume():
#the consumer - get a value from the queue and try to login
global queue, done
while queue or not done:
if len(queue) == 0:
sleep(0.05)
continue
try_login(queue.pop())
#create a generator and multiple consumer threads with the respective fcts
generator = Thread(target=generate)
consumers = [Thread(target=consume) for _ in range(num_consumers)]
#start the consumers and the generator
[c.start() for c in consumers]
generator.start()
</code></pre>
<p>这不是一个完整的方法-例如,<code>queue.pop()</code>可能应该包装在try语句中,因为列表仍然可以是空的,尽管检查线程是否在<code>if</code>之后而在{<cd3>}之前切换,您还需要优化睡眠值和消费者数量等。但最重要的是,它不会让你在黑客gmail上走得太远-这应该是相当不可能的暴力,因为他们部署了验证码,ip禁令和其他美好的东西后,太多次失败的尝试。你最好的方法是社会工程:)</p>