በasyncio.gather አማካኝነት ያልተሳኩ የፕሮክሲ ጥያቄዎችን መያዝ
በasyncio.gather የሚመለሱ ልዩ ሁኔታዎችን ይመርምሩ እና እያንዳንዱን ውጤት ከተመረጠው ፕሮክሲ ጋር ያገናኙት።
asyncio.gather ከreturn_exceptions=True ጋር የተግባሮችን ልዩ ሁኔታዎች በውጤት ዝርዝሩ ውስጥ ያስቀምጣል። ስለዚህ ቡድኑን ያለ ልዩ ሁኔታ መጠበቅ ሁሉም የፕሮክሲ ጥያቄዎች ተሳክተዋል ማለት አይደለም።
መድረሻውንና የተመረጠውን ፕሮክሲ ከተላኩት awaitables ጋር ያስቀምጡ፣ ከዚያም እያንዳንዱን ውጤት ይመርምሩ፦
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 ይተግብሩ።
ውጤቶቹ ከታዩ በኋላ መተግበሪያው የግንኙነት ውድቀቶችን ከመድረሻ ምላሾች መለየት እና የትኛው ስራ ተጨማሪ ሙከራ እንደሚገባው መወሰን ይችላል።