Jeden worker najde použitelnou proxy. Vrátíte její adresu, zavoláte cancel na ostatních futures a očekáváte, že síťová aktivita přestane. Nemusí.

Future lze zrušit předtím, než jeho callable začne. Jakmile vlákno už vykonává požadavek, zrušení jeho Future tuto socketovou operaci nepřeruší. Worker potřebuje vlastní omezenou síťovou operaci a cestu úklidu.

Na životnosti exekutoru také záleží. Opuštění kontextu ThreadPoolExecutor čeká na dokončení jeho práce. Nalezení jednoho rychlého výsledku a následné čekání na několik pomalých workerů může způsobit, že celkové zpoždění volajícího vůbec nepřipomíná latenci hlášenou vítězem.

Ohraňte závod dřív, než začne

  • Omezte počet souběžných kontrol místo podání neomezeného veřejného seznamu. Bezplatný seznam proxy poskytuje kandidáty pro vstup kontrolora, přičemž protokol každého koncového bodu zůstává workerovi.
  • Dejte každému požadavku vhodnou politiku připojení a čtení.
  • Dejte volajícímu celkový rozpočet rozhodnutí.
  • Určete, kdo vypouští nebo zavírá výsledky workerů, které rozhodnutí přežijí.

Čekat na Future kratší dobu není totéž jako zkrátit jeho podkladový požadavek. Stejně tak opuštění výsledku neuvolní okamžitě každý síťový prostředek.

První úspěšný výsledek je také jen první úspěšná kontrola. Může záviset na plánování, kešovaných připojeních a konkrétním cíli kontroly. Nedokazuje, že koncový bod je univerzálně nejrychlejší nebo že skutečný úkol uspěje.

Často je malý uchovávaný fond s nedávnými pozorováními jednodušší než závod s celým seznamem před každým stahováním. Použijte výsledek skutečné operace k aktualizaci záznamu, s řízenou politikou obnovy při selháních. Předběžná kontrola by si měla vydělat své náklady, místo aby ze zvyku zdvojnásobila každý úkol.

Související články