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 ਸੈੱਟ ਵਰਤੋ, ਜੋ ਮੁੱਕਣ ਉੱਤੇ ਮੁੜ ਭਰਿਆ ਜਾਂਦਾ ਹੈ।

ਜੇ ਬੈਚ ਨਤੀਜੇ ਦੇਣੇ ਜਾਰੀ ਰੱਖਣੇ ਹਨ ਤਾਂ ਜਾਂਚ ਦੇ ਅੰਦਰ ਉਮੀਦ ਕੀਤੀਆਂ ਨੈੱਟਵਰਕ ਨਾਕਾਮੀਆਂ ਸੰਭਾਲੋ। ਉਹ ਆਈਟਮ ਲੈਣ ਵੇਲੇ ਅਣਸੁਲਝਿਆ ਅਪਵਾਦ ਉਠਦਾ ਹੈ। ThreadPoolExecutor ਦਾ chunksize ਇਹ ਸਬਮਿਸ਼ਨ ਬਜਟ ਨਹੀਂ ਦਿੰਦਾ, ਅਤੇ ਪੁਰਾਣੇ Python ਸੰਸਕਰਣਾਂ ਵਿੱਚ buffersize ਨਹੀਂ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ