2015-06-03 18 views
0

我的问题是python如何创建多个密码测试的线程?为什么它更有效率?在这段代码中使用线程函数时,python会发生什么

import zipfile 
from threading import Thread 

def extractFile(zFile, password): 
    try: 
     zFile.extractall(pwd=password) 
     print '[+] Found password ' + password + '\n' 
    except: 
     pass 

def main(): 
    zFile = zipfile.ZipFile('evil.zip') 
    passFile = open('dictionary.txt') 
    for line in passFile.readlines(): 
     password = line.strip('\n') 
     t = Thread(target=extractFile, args=(zFile, password)) 
     t.start() 

if __name__ == '__main__': 
    main()` 

回答

1

多线程的使用使得代码效率降低。

这里正在进行的工作是面向CPU的。 Python线程在分发面向CPU的工作时效果不佳,因为一次只能有一个线程工作(因为Python GIL或Global Intepreter Lock)!

Python的线程是阻塞操作,比如网络电话更加有用,磁盘读取等

在此之上,使得大量线程的开销增加了很多,因为有一个线程调度器不断切换哪个线程正在运行,以避免线程饿死。在你的例子中,有一个的线程为中的每个文件创建,如果超过30-50行,这是非常糟糕的。

要回答你的问题:

Python是怎样创建线程多个密码的测试?

它只是在文件中每行的新线程中运行函数extractFile

为什么它更高效?

由于Python的GIL的限制,有超过20个线程的开销,这绝对是不超过通过无多线程整个文件运行效率。

相关问题