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 ಅನ್ವಯಿಸಿ.

ಫಲಿತಾಂಶಗಳು ಕಾಣಿಸಿಕೊಂಡ ನಂತರ ಅಪ್ಲಿಕೇಶನ್ ಸಂಪರ್ಕ ವೈಫಲ್ಯಗಳನ್ನು ಗಮ್ಯಸ್ಥಾನದ ಪ್ರತಿಕ್ರಿಯೆಗಳಿಂದ ಪ್ರತ್ಯೇಕಿಸಿ ಯಾವ ಕೆಲಸಕ್ಕೆ ಇನ್ನೊಂದು ಪ್ರಯತ್ನ ಅರ್ಹ ಎಂದು ನಿರ್ಧರಿಸಬಹುದು.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು