Как ускорить несколько последовательных HTTP-запросов в Python с помощью Http.Client - PullRequest
0 голосов
/ 11 января 2019

Я хочу получить данные с нескольких страниц, около 10000 страниц с числовыми массивами. Но один за другим занимает так много времени, и я начинающий в Python, поэтому я не знаю много о многопоточности и асинхронности

Код работает нормально , для этого требуются все ожидаемые данные, , но для этого требуется . И я знаю, что это, вероятно, могло бы быть сделано быстрее, если бы я делал больше, чем запрос за раз

import http.client
import json

def get_all_data():
    connection = http.client.HTTPConnection("localhost:5000")
    page = 1
    data = {}

    while True:
        try:

            api_url = f'/api/numbers?page={page}'
            connection.request('GET', api_url)
            response = connection.getresponse()

            if(response.status is 200):
                data[f'{page}'] = json.loads(response.read())['numbers']
                items_returned = len(data[f'{page}'])
                print(f'Por Favor, Aguarde. Obtendo os Dados... Request: {page} -- Itens Retornados: {items_returned}')
                page += 1
                if items_returned == 0 or items_returned == None :
                    break
    except:
        connection.close()

print('Todas as Requisições Concluídas!')
return data

Как выполнить рефакторинг этого кода для выполнения нескольких запросов одновременно вместо одного за другим?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Как правило, существует три способа выполнения такой работы: многопоточность, многопроцессорность и асинхронность. Как уже упоминалось в ACE, параметр страницы существует из-за того, что сервер динамически генерирует шаблон, а количество страниц может меняться со временем из-за обновления базы данных. , Самый простой способ сделать это может быть пакетное задание, и попытаться поместить каждый пакет в блок исключения исключения и обработать последнюю часть (недостаточно для одного пакета) отдельно. Вы можете установить количество заданий в каждом пакете как переменную и попробовать разные решения.

0 голосов
/ 11 января 2019

Ваша страница параметров (производитель) является динамической и зависит от последнего запроса (потребитель). Если вы не можете отделить производителя, вы не можете использовать сопрограммы или многопоточность.

...