Я хочу сделать много URL-запросов для веб-сайта REST. Обычно между 75-90k. Тем не менее, мне нужно ограничить количество одновременных подключений к веб-сервису.бассейн с множеством запросов.session?
Я начал играть с помощью grequests следующим образом, но быстро начал пережевывать открытые сокеты.
concurrent_limit = 30
urllist = buildUrls()
hdrs = {'Host' : 'hostserver'}
g_requests = (grequests.get(url, headers=hdrs) for url in urls)
g_responses = grequests.map(g_requests, size=concurrent_limit)
Поскольку это длится минутку или около того, меня поражают «максимальное количество найденных сокетов». Насколько я могу судить, каждый из вызовов request.get в grequests использует собственный сеанс, что означает, что для каждого запроса открывается новый сокет.
Я нашел примечание к github, ссылаясь на то, как сделать grequests одним сеансом. Но это, по-видимому, эффективно устраняет все запросы в один общий пул. Это, похоже, превзошло цель асинхронных HTTP-запросов.
s = requests.session()
rs = [grequests.get(url, session=s) for url in urls]
grequests.map(rs)
Можно ли использовать grequests или gevent.Pool, чтобы создать несколько сеансов?
Путь другой: Как я могу сделать много одновременных HTTP-запросов, используя либо путем очередей, либо объединения пулов?
Я думаю, у меня есть аналогичная проблема: http://stackoverflow.com/questions/34593643/gevent-grequests-wont-spawn-more-greenlets, как ОС как 70 потоков? – domoarrigato