buffersize на Executor.map в Python 3.14 за големи партиди прокси
Използвайте buffersize на Executor.map в Python 3.14, за да спрете консумацията на входа, докато резултатите чакат, независимо от max_workers.
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.