Как сделать параллельные многопоточные запросы для проверки времени ответа списка URL-адресов в python - PullRequest
0 голосов
/ 03 мая 2020

Я пишу python скрипт для тестирования запросов (я новичок в этом), где у меня есть список URL-адресов, которые я хочу протестировать, используя несколько одновременных запросов для ex, если у меня есть 10 URL-адресов и 100 входное число затем следует установить 100 независимых подключений, и они должны получить доступ к этим URL-адресам случайным образом, и в конце возвращают среднее время ответа каждого URL-адреса.

out = []
CONNECTIONS = 100
TIMEOUT = 50
json_str=[]
tlds = open('sampleurl.txt').read().splitlines()

for data in tlds:
    json_str.append(''.join(data ))


def load_url(data, timeout):

    response = requests.post('http://example.com', headers=headers,data=data,timeout=timeout)
    return response.status_code

with concurrent.futures.ThreadPoolExecutor(max_workers=CONNECTIONS) as executor:
    future_to_url = (executor.submit(load_url, data, TIMEOUT) for data in json_str)
    time1 = time.time()

    for future in concurrent.futures.as_completed(future_to_url):

        try:
            data = future.result()
        except Exception as exc:
            data = str(type(exc))
        finally:
            out.append(data)
    time2 = time.time()

print(f'Took {time2-time1:.2f} s')

print(pd.Series(out).value_counts())

Я пытался это сделать, но он останавливается после тестирования каждого URL-адреса только один раз. Я хочу, чтобы код продолжал работать и открывать URL несколько раз, пока все соединения не будут исчерпаны.

1 Ответ

0 голосов
/ 03 мая 2020

Я не вижу, что будет хранить json, но поскольку он хранит данные, вы обрабатываете каждый запрос только один раз, используя этот фрагмент кода

future_to_url = (executor.submit(load_url, data, TIMEOUT) for data in json_str)

, но вы хотите, чтобы это задание было отправлено исполнителю Служба несколько раз, то вы можете создать вокруг нее oop и запустить его несколько раз.

while count < 10:
    count += 1
    future_to_url = (executor.submit(load_url, data, TIMEOUT) for data in json_str)

Это отправит несколько запросов в службу Executor.

...