Два наблюдения:
Вы можете попробовать использовать ThreadPoolExecutor или ProcessPoolExecutor из библиотеки concurrent.futures, чтобы вы могли распараллелить выполнение.
Возможно, вы захотите узнать, ускоряется ли создание явных запросов Session и повторное использование сеанса.Это может сэкономить некоторую стоимость в пересмотре TLS / рукопожатии.Обратите внимание, что вам может потребоваться быть осторожным с cookie-файлами, так как повторно используемые сеансы по умолчанию будут использовать банку cookie.
Не проверено, пример быстрого разбора:
session = requests.Session()
def do_request(line):
proxy = line.split('\n', 1)[0]
r = session.get('http://www.icanhazip.com/', proxies={'http': 'http://' + proxy}, timeout=1)
return r.status_code
with ThreadPoolExecutor(max_workers=8) as executor, \
open("proxies.txt", "r") as f:
results = executor.map(do_request, f)
for future in results:
try:
print(future.result())
except (requests.exceptions.ProxyError, requests.exceptions.ConnectTimeout,
requests.exceptions.ReadTimeout, requests.exceptions.ConnectionError):
print("Doesn't work")