当其中一名工人完成任务时,我该如何杀死他们?

时间:2019-05-22 11:10:35

标签: python multiprocessing

我正在编写一个简单的蛮力脚本,并尝试添加多处理程序以使其更快,但是我不知道如何编写callback函数,该函数将在工作人员中的一个找到密码时终止工作人员。 / p>

我试图制作从bruteforce函数传递到quit函数的全局变量,但没有成功。

我将发布工作程序代码和蛮力部分。可能有点混乱,我只是在尝试一些事情,并且正在使用print语句进行专业的调试。

class Process:
    def __init__(self, args):
        self.args = args
        self.ncpu = multiprocessing.cpu_count()
        self.pool = multiprocessing.Pool(processes=self.ncpu)

    def quit(self, result):
        if result:
            self.pool.terminate()

    def run(self, args):
        split = MultiSplit(self.args)
        if not self.args.m:
            split.split()
            for i in range(1, self.ncpu + 1):
                self.pool.apply_async(bruteforce, (args, i), callback=self.quit)
            self.pool.close()
            self.pool.join()
        else:
            bruteforce(args, 0)

这里是bruteforce函数

def bruteforce(args, n):
   in_zip = args.input
   if not args.m:
       wl = "/home/kuskus/Desktop/ZyBR/testing/wordlists/%d.txt" % n
   elif n == 0:
       wl = args.wordlist
   print(pyzipper.AESZipFile(in_zip))
   found = False
   global password
   with pyzipper.AESZipFile(in_zip) as zf:
       with open(wl) as wordlist:
           for line in wordlist:
               password = line.strip('\n')
               if not found:
                   try:
                       zf.pwd = str.encode(password)
                       zf.extractall('./')
                       print("password found: %s" % password)
                       return
                   except Exception:
                       if args.q:
                           pass
                       else:
                           print(password)

我的想法是以某种方式将找到的变量从bruteforce函数返回到callback函数,但是我认为这行不通,因为我需要执行4次。

0 个答案:

没有答案