Задать вопрос

Как ускорить загрузку данных http (GET)?

Есть следующая программа
import requests

# Длина списка urls = 35000+
urls = get_urls()

for url in urls:
    request = requests.get(url)
    response = request.text
    do_something(text)


На выполнение каждого запроса requests.get(url) уходит 1-2 секунды.
Как можно ускорить работу сприпта? Можно ли как-то запустить параллельное выполнение запросов?

спасибо.
  • Вопрос задан
  • 780 просмотров
Подписаться 3 Оценить 2 комментария
Решения вопроса 1
@asd111
Не проверял, но должно работать.
chriskiehl.com/article/parallelism-in-one-line
import requests
from multiprocessing.dummy import Pool as ThreadPool  #Thread pool

# Длина списка urls = 35000+
urls = get_urls()
pool = ThreadPool(4)     # создаем 4 потока - по количеству ядер CPU
results = pool.map(my_mega_function, urls) # запускает параллельно 4 потока и в каждом потоке  обрабатывает одно из значений из списка urls с помощью функции my_mega_function. results - то что возвращает функция my_mega_function
pool.close() 
pool.join()

def my_mega_function(url): #Функция, которая будет вызываться для каждого запроса
    request = requests.get(url)
    response = request.text
    do_something(text)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@nirvimel
Можно ли как-то запустить параллельное выполнение запросов?
Ответ написан
un1t
@un1t
либо сделать много воркеров python-rq
либо асинхронно anyncio
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы