Задача: как отправить> 1000 HTTP-запросов за одну секунду с помощью Python

Рассмотрим следующий случай: существует медленный сервер, который использует около 200 мс для обработки запроса (без учета времени передачи по сети). И теперь нам нужно посылать кучу запросов каждую секунду.

После прочтения этого сообщения я попробовал многопоточные, многопроцессорные, скрученные (agent.request) и eventlet. Но самое большое ускорение – всего 6 раз , что достигается с помощью скрученного и eventlet, оба используют epoll.

Следующий код показывает тестовую версию с eventlet,

import eventlet eventlet.monkey_patch(all=False, socket=True) import requests def send(): pile = eventlet.GreenPile(30) for i in range(1000): pile.spawn(requests.get, 'https://api.???.com/', timeout=1) for response in pile: if response: print response.elapsed, response.text 

Кто-нибудь может помочь мне понять, почему ускорение настолько низкое? И есть ли какой-нибудь другой механизм, который мог бы сделать его намного быстрее?

One Solution collect form web for “Задача: как отправить> 1000 HTTP-запросов за одну секунду с помощью Python”

Я знаю, что это старый пост, но кому-то это может понадобиться.

Если вы хотите выполнить нагрузочное тестирование, но хотите использовать python, тогда вы должны использовать инструмент, такой как саранча: http://locust.io/

Вот мое решение, которое привело к 10 000 запросов за 10 секунд:

Необходимый пакет: sudo pip install grequests

Код:

 import grequests import time start_time = time.time() # Create a 10000 requests urls = ['http://www.google.co.il']*10000 rs = (grequests.head(u) for u in urls) # Send them. grequests.map(rs) print time.time() - start_time # Result was: 9.66666889191 
Python - лучший язык программирования в мире.