max_workers=8 абмяжоўвае колькасць патокаў выканання. Але гэта не перашкаджае асобнаму цыклу падачы ствараць Future для кожнага endpoint у вялікім уваходзе.

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 — прыкладныя бюджэты. бясплатны спіс проксі дае публічныя кандыдаты для endpoint; захоўвайце іх пратакол разам з адрасам, каб check_proxy мог выкарыстаць правільны транспарт.

Калі буфер падачы запоўніцца, map прыпыняе спажыванне ітэратара, пакуль не будуць вернуты вынікі. Гэта датычыцца і генератараў.

map па-ранейшаму вяртае ў парадку ўваходу: павольная ранняя праверка можа ўтрымліваць гатовыя наступныя вынікі і затрымліваць далейшы ўваход. Для апрацоўкі ў парадку завяршэння выкарыстоўвайце яўна абмежаваны набор futures, які папаўняецца па меры завяршэння.

Апрацоўвайце чаканыя сеткавыя збоі ўнутры праверкі, калі пакет павінен працягваць вяртаць вынікі. Неапрацаванае выключэнне ўзнікае, калі гэты элемент выбіраецца. chunksize у ThreadPoolExecutor не дае гэтага бюджэту падачы, а ранейшыя версіі Python не маюць buffersize.

Падобныя артыкулы