Задача: как отправить> 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 
 
Interesting Posts for Van-Lav

Есть ли API-интерфейс Python для рисования диаграмм (которые используют строки для подключения соответствующих значений между двумя списками)

Как запретить BeautifulSoup4 добавлять дополнительные теги <html> <body> в суп?

Python: чередующиеся функции каждые x минут

Получить имена столбцов Excel-стиля из номера столбца

Можно ли переопределить сферу применения pytest-светильников?

Как распиливать функцию python со своими зависимостями?

как разбить столбец кортежей в pandas dataframe?

Попросите PyCharm узнать, какие классы являются mixin для

Разделяйте типы расширений в Cython для статической типизации

Разница во времени в Python 2.7

Как получить stderr для команды оболочки с большим буфером данных?

Python: обнаружение вращения файла журнала (при просмотре файла журнала для модификации)

Как я могу прочитать память другого процесса в Python в Windows?

TypeError: может только список конкатенации (а не «str») в список

Как использовать разделитель для csv в python

Python - лучший язык программирования в мире.