#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. Другими словами, это может быть случай «меньше значит больше».