max_workers=8 ограничава изпълняващите нишки. Но не спира отделен цикъл на подаване да създава Future за всяка крайна точка при огромен вход.

Python 3.14 добавя ограничена опция за предварително четене:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=8) as executor:
    for result in executor.map(check_proxy, endpoints, buffersize=24):
        record_result(result)

check_proxy е съществуващата синхронна проверка с мрежови срокове и почистване; record_result обработва върнатото от нея наблюдение. Стойностите 8 и 24 са примерни бюджети. безплатен списък с прокси предоставя публични кандидати за крайни точки; запазвайте протокола към всеки адрес, за да може check_proxy да използва правилния транспорт.

Когато буферът за подаване се напълни, map спира да консумира итерируемия обект, докато не бъдат върнати резултати. Това важи и за генератори.

map все още връща в реда на входа: бавна ранна проверка може да задържи готови следващи резултати и да забави допълнителен вход. За обработка по ред на завършване използвайте изрично ограничен набор от futures, който се попълва при завършване.

Обработвайте очакваните мрежови откази вътре в проверката, ако партидата трябва да продължи да връща резултати. Необработено изключение се повдига, когато този елемент бъде извлечен. chunksize на ThreadPoolExecutor не дава този бюджет за подаване, а по-старите версии на Python нямат buffersize.

Подобни статии