Comprovacions de proxy amb Python: per què Future.cancel() deixa els fils en marxa
Enteneu per què cancel·lar futures pendents no atura les comprovacions de xarxa actives i limiteu una cursa de proxy sense afirmar que demostra la salut del destí.
Un worker troba un proxy utilitzable. Retorneu la seva adreça, crideu cancel sobre els altres futures i espereu que l'activitat de xarxa s'aturi. Pot ser que no.
Un Future es pot cancel·lar abans que comenci el seu callable. Quan un fil ja està executant una petició, cancel·lar el seu Future no interromp aquella operació de socket. El worker necessita la seva pròpia operació de xarxa limitada i un camí de neteja.
La vida de l'executor també importa. Sortir d'un context de ThreadPoolExecutor espera que la seva feina acabi. Trobar un resultat ràpid i després esperar diversos workers lents pot fer que el retard total del cridador no s'assembli gens a la latència reportada pel guanyador.
Limiteu la cursa abans de començar-la
- Limiteu el nombre de comprovacions simultànies en lloc d'enviar una llista pública il·limitada. La llista gratuïta de proxys proporciona candidats per a l'entrada del comprovador, amb el protocol de cada punt final conservat per al worker.
- Doneu a cada petició una política de connexió i lectura adequada.
- Doneu al cridador un pressupost global de decisió.
- Definiu qui buida o tanca els resultats dels workers que sobreviuen a la decisió.
Esperar menys un Future no és el mateix que fer més curta la seva petició subjacent. Igualment, abandonar el resultat no allibera immediatament tots els recursos de xarxa.
El primer resultat reeixit també és només la primera comprovació reeixida. Pot dependre de la planificació, de les connexions en caché i del destí concret de la comprovació. No estableix que el punt final sigui universalment el més ràpid ni que la tasca real tindrà èxit.
Sovint un petit pool retingut amb observacions recents és més simple que competir amb tota la llista abans de cada descàrrega. Feu servir el resultat de l'operació real per actualitzar el registre, amb una política de recuperació controlada per als errors. La precomprovació hauria de guanyar-se el cost en lloc de duplicar cada tasca per costum.