Как можно оптимизировать многопоточный скрипт на python, работающий по большому списку?

num_threads = 40 # число макс потоков в пуле

def get_article(proxies, links): # функция получения содержимого страницы
    i, link = links #распаковываем кортеж links
    try:
        proxy = proxies.popleft() #берем прокси
        domain = re.findall('://(.+?)/', link) #вытаскиваем домен из урла
        domain = domain[0] #вытаскиваем домен
        response = requests.get(link, timeout = 30, proxies={"https": proxy}) # открываем страницу
        doc = Document(response.text)
        h = HTML2Text()
        h.ignore_links = True
        h.ignore_images = True
        title = doc.title()
        article = h.handle(doc.summary())
        content = title+"\n\n"+article
        print(content)
    except Exception as e:
        print('Ошибка:', link, proxy, traceback.format_exc())
    finally:
        proxies.append(proxy)
proxies = load_proxies()



all_links = enumerate(all_links) # нумерованный список со ссылками, длина порядка 200 тысяч строк и выше, строки вида http://domain.ru/lalal/allaa.html


with ThreadPoolExecutor(max_workers=num_threads) as pool:
    pool.map(lambda sitemap: get_article(proxies, sitemap), all_links)

Подскажите пожалуйста по моему коду многопоточного парсинга контента со страниц. При запуске дико жрет ресурсы-как я понимаю причина в том, что подается большой массив данных, на маленьких такого не наблюдалось. Как можно оптимизировать его? Пока вижу только вариант разбивать входной список на несколько поменьше и подавать их по очереди. Может есть более красивый способ?


Ответы (0 шт):