asyncio.gather return_exceptions=True ਨਾਲ ਕੰਮਾਂ ਦੀਆਂ ਅਪਵਾਦਾਂ ਨੂੰ ਆਪਣੀ ਨਤੀਜਾ ਸੂਚੀ ਵਿੱਚ ਰੱਖਦਾ ਹੈ। ਇਸ ਲਈ ਬਿਨਾਂ ਕਿਸੇ ਅਪਵਾਦ ਦੇ ਬੈਚ ਦੀ ਉਡੀਕ ਕਰਨ ਦਾ ਮਤਲਬ ਇਹ ਨਹੀਂ ਕਿ ਹਰ ਪ੍ਰੌਕਸੀ ਬੇਨਤੀ ਸਫਲ ਹੋਈ।

ਮੰਜ਼ਿਲ ਅਤੇ ਚੁਣੀ ਗਈ ਪ੍ਰੌਕਸੀ ਨੂੰ ਜਮ੍ਹਾਂ ਕੀਤੇ awaitable ਦੇ ਨਾਲ ਰੱਖੋ, ਫਿਰ ਹਰ ਨਤੀਜੇ ਦੀ ਜਾਂਚ ਕਰੋ:

outcomes = await asyncio.gather(*jobs, return_exceptions=True)

for (url, proxy), outcome in zip(routes, outcomes):
    if isinstance(outcome, BaseException):
        record_failure(url, proxy, outcome)
    else:
        record_success(url, proxy, outcome)

jobs ਵਿੱਚ ਐਪਲੀਕੇਸ਼ਨ ਦੀਆਂ ਬੇਨਤੀ ਕੋਰੂਟੀਨਾਂ ਹੁੰਦੀਆਂ ਹਨ; routes ਵਿੱਚ ਉਹਨਾਂ ਦੀਆਂ ਸੰਬੰਧਿਤ (url, proxy) ਜੋੜੀਆਂ ਉਸੇ ਕ੍ਰਮ ਵਿੱਚ ਹੁੰਦੀਆਂ ਹਨ। ਰਿਕਾਰਡਿੰਗ ਫੰਕਸ਼ਨ ਐਪਲੀਕੇਸ਼ਨ ਦਾ ਆਪਣਾ ਨਤੀਜਾ ਪ੍ਰਬੰਧਨ ਹਨ। ਮੁਕੰਮਲ ਹੋਣ ਦਾ ਕ੍ਰਮ ਵੱਖਰਾ ਹੋਣ ’ਤੇ ਵੀ gather ਇਨਪੁਟ ਕ੍ਰਮ ਬਣਾਈ ਰੱਖਦਾ ਹੈ।

ਵਾਪਸ ਆਏ ਸੰਤਾਨ ਕੰਮ ਦੇ CancelledError ਨੂੰ ਉਸ ਦੀ ਪ੍ਰੌਕਸੀ ਨੂੰ ਦੋਸ਼ ਦੇਣ ਦੀ ਥਾਂ ਰੱਦ ਕਰਨਾ ਵਜੋਂ ਸ਼੍ਰੇਣੀਬੱਧ ਕਰੋ। ਬਾਹਰੀ gather ਦਾ ਰੱਦ ਕਰਨਾ ਅਜੇ ਵੀ ਅਧੂਰੇ ਸੰਤਾਨਾਂ ਤੱਕ ਫੈਲਦਾ ਹੈ; return_exceptions ਉਸ ਰੱਦ ਕਰਨ ਨੂੰ ਆਮ ਸਫਲਤਾ ਵਿੱਚ ਨਹੀਂ ਬਦਲਦਾ।

HTTP ਸਥਿਤੀ ਦਾ ਪ੍ਰਬੰਧਨ ਵੀ ਬੇਨਤੀ ਕਾਰਵਾਈ ਦੇ ਅੰਦਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। aiohttp ਡਿਫ਼ਾਲਟ ਰੂਪ ਵਿੱਚ ਹਰ HTTP ਗਲਤੀ ਲਈ ਅਪਵਾਦ ਨਹੀਂ ਚੁੱਕਦਾ, ਇਸ ਲਈ ਸਥਿਤੀ ਵਾਪਸ ਕਰੋ ਜਾਂ ਕੰਮ ਦੀ ਨੀਤੀ ਅਨੁਸਾਰ raise_for_status ਲਾਗੂ ਕਰੋ।

ਨਤੀਜੇ ਦਿਖਣ ਤੋਂ ਬਾਅਦ ਐਪਲੀਕੇਸ਼ਨ ਕਨੈਕਸ਼ਨ ਅਸਫਲਤਾਵਾਂ ਨੂੰ ਮੰਜ਼ਿਲ ਦੇ ਜਵਾਬਾਂ ਤੋਂ ਵੱਖ ਕਰ ਸਕਦੀ ਹੈ ਅਤੇ ਤੈਅ ਕਰ ਸਕਦੀ ਹੈ ਕਿ ਕਿਹੜਾ ਕੰਮ ਇੱਕ ਹੋਰ ਕੋਸ਼ਿਸ਼ ਦੇ ਯੋਗ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ