Python-proxykontroller: hvorfor Future.cancel() lar tråder fortsette å kjøre
Forstå hvorfor avbryting av ventende futures ikke stopper aktive nettverkskontroller, og avgrens et proxykappløp uten å hevde at det beviser destinasjonens helse.
Én worker finner en brukbar proxy. Du returnerer adressen, kaller cancel på de andre futurene og forventer at nettverksaktiviteten stopper. Det gjør den kanskje ikke.
En Future kan avbrytes før callable-en starter. Når en tråd allerede utfører en forespørsel, avbryter ikke avbrytingen av Future-en dens den socket-operasjonen. Workeren trenger sin egen avgrensede nettverksoperasjon og oppryddingsvei.
Levetiden til executor-en betyr også noe. Å forlate en ThreadPoolExecutor-kontekst venter på at arbeidet skal bli ferdig. Å finne ett raskt resultat og deretter vente på flere trege workere kan få den totale forsinkelsen for kalleren til å se helt annerledes ut enn vinnerens rapporterte latens.
Avgrens kappløpet før det starter
- Begrens antall samtidige kontroller i stedet for å sende inn en ubegrenset offentlig liste. Den gratis proxylisten gir kandidater til kontrollerens input, mens hvert endepunkts protokoll beholdes for workeren.
- Gi hver forespørsel en passende tilkoblings- og lesepolicy.
- Gi kalleren et samlet beslutningsbudsjett.
- Definer hvem som tømmer eller lukker resultater fra workere som overlever beslutningen.
Å vente kortere på en Future er ikke det samme som å gjøre den underliggende forespørselen kortere. På samme måte frigjør ikke det å forlate resultatet alle nettverksressurser umiddelbart.
Det første vellykkede resultatet er også bare den første vellykkede kontrollen. Det kan avhenge av planlegging, bufrede tilkoblinger og den konkrete kontroldestinasjonen. Det fastslår ikke at endepunktet er universelt det raskeste eller at den egentlige oppgaven vil lykkes.
Ofte er en liten beholdt pool med nylige observasjoner enklere enn å kappløpe mot hele listen før hver nedlasting. Bruk resultatet av den faktiske operasjonen til å oppdatere posten, med en kontrollert gjenopprettingspolicy for feil. Forhåndskontrollen bør tjene inn kostnaden sin i stedet for å doble hver oppgave av vane.