我的问题是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()`
答案 0 :(得分:1)
使用多线程会降低此代码的效率。
这里的工作是面向CPU的。 Python线程在分配面向CPU的工作方面效果不佳,因为一次只能有一个线程工作(因为Python GIL或Global Intepreter Lock)!
Python线程对于阻止网络调用,磁盘读取等操作更有用。
除此之外,制作大量线程会增加大量开销,因为有一个线程调度程序不断切换正在运行的线程,以便没有线程匮乏。在您的示例中,为行中的每个文件创建了一个线程,如果超过30-50行,则非常糟糕。
回答你的问题:
python如何创建用于测试多个密码的线程?
它只是在文件中每一行的新线程中运行函数#include "HugeInteger.h" // include definiton of class HugeInteger
using namespace std;
int main()
{
HugeInteger A, B, C, D;
// input value for A & B
cout << "****** Test << & >> operators ******\n\n";
cout << "Input values for A and B: ";
cin >> A >> B;
cout << "\nA = " << A << "\nB = " << B;
D = B;
// test += operator
cout << "\n\n****** Test += operator ******\n\n";
cout << "A = " << A << "\nB = " << B << "\nC = " << C << "\n\n";
cout << "C = B += A\n";
C = B += A;
cout << "\nA = " << A << "\nB = " << B << "\nC = " << C;
B = D; // restore B's value
system("pause");
return 0;
} // end main
。
为什么效率更高?
由于Python GIL的限制以及拥有超过20个线程的开销,这绝对不比没有多线程运行整个文件更有效。