asyncio.gather સાથે નિષ્ફળ પ્રોક્સી વિનંતીઓનું સંચાલન
asyncio.gather પરત કરે છે તે અપવાદોની તપાસ કરો અને દરેક પરિણામને પસંદ કરેલ પ્રોક્સી સાથે જોડેલું રાખો.
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 લાગુ કરો.
પરિણામો દૃશ્યમાન થાય પછી એપ્લિકેશન કનેક્શન નિષ્ફળતાઓને ગંતવ્યની પ્રતિક્રિયાઓથી અલગ કરી શકે છે અને નક્કી કરી શકે છે કે કયું કાર્ય બીજા પ્રયાસને લાયક છે.