Какой самый быстрый способ отправить 10000 запросов в api?

#python #python-requests

Вопрос:

Я пытаюсь создать скрипт, способный как можно быстрее выполнить около 10000 вызовов API, и выполнить некоторые базовые обработки и вычисления с возвратом вызова json. Мой текущий код использует модуль запросов и выполняет около 500 потоков. Это уже довольно быстро, так как он способен выполнить 10000 вызовов примерно за 20 секунд. Однако я хотел бы сделать это еще быстрее, если это возможно, так как для моего приложения скорость очень важна.

Вот фрагменты моего текущего кода

     thread_count = 500
session = requests.Session()
for i in range(thread_count):
    if lookup_list:
        thread_list.append(threading.Thread(target=get_traits, args=(trait_dict, url, individual_dict, proxies[i % proxies_len], quantity, session)))
        thread_list[i].start()
    else:
        break
 

Это фрагмент из функции, которая выполняет фактические запросы:

 def get_traits(trait_dict, url, individual_dict, proxy, quantity, session):

proxies = {
    'http': 'http://'   proxy[2]   ':'   proxy[3]   '@'   proxy[0]   ':'   proxy[1],
    'https': 'https://'   proxy[2]   ':'   proxy[3]   '@'   proxy[0]   ':'   proxy[1]
}

global lookup_list
while lookup_list:

    if len(lookup_list) == 1:
        token = lookup_list[0]
    else:
        token = lookup_list[random.randint(0, len(lookup_list) - 1)]
    indexed_url = url   str(token)
    try:
        response = session.get(indexed_url, timeout=4, proxies=proxies)
    except:
        continue
 

Есть ли какие — либо способы сделать запросы быстрее? Или есть другие библиотеки, которые больше подходят для моего приложения? Я уже пробовал использовать async и aiohttp, однако aiohttp не поддерживает прокси-серверы и ограничивает скорость моих запросов, что в конечном итоге замедляет их. Все советы будут высоко оценены

Комментарии:

1. Общая производительность будет ограничена скоростью отклика с сайтов, на которых вы отправляете запросы GET. Сказав это, я был бы более склонен использовать пул потоков, потому что с таким количеством потоков вы можете столкнуться с проблемами GIL. Другими словами, это может быть случай «меньше значит больше».