Python proxy patikros: kodėl Future.cancel() palieka gijas veikti
Supraskite, kodėl laukiančių future atšaukimas nesustabdo aktyvių tinklo patikrų, ir apribokite proxy lenktynes nepareikšdami, kad jos įrodo paskirties vietos sveikatą.
Vienas worker randa tinkamą proxy. Grąžinate jo adresą, iškviečiate cancel kitiems future ir tikitės, kad tinklo veikla sustos. Gali ir nesustoti.
Future galima atšaukti prieš jam pradedant savo callable. Kai gija jau vykdo užklausą, jos Future atšaukimas nenutraukia tos socket operacijos. Worker turi turėti savo ribotą tinklo operaciją ir valymo kelią.
Executor gyvavimo trukmė taip pat svarbi. Išeinant iš ThreadPoolExecutor konteksto laukiama, kol jo darbas baigsis. Radus vieną greitą rezultatą ir tada laukiant kelių lėtų worker, bendras iškvietėjo vėlavimas gali visiškai nepriminti nugalėtojo praneštos latencijos.
Apribokite lenktynes prieš jas pradedant
- Apribokite vienu metu atliekamų patikrų skaičių, o ne pateikite neribotą viešą sąrašą. Nemokamas proxy sąrašas teikia kandidatus tikrintuvo įvesčiai, o kiekvieno galinio taško protokolas paliekamas worker.
- Kiekvienai užklausai suteikite tinkamą ryšio ir skaitymo politiką.
- Suteikite iškvietėjui bendrą sprendimo biudžetą.
- Apibrėžkite, kas ištuština arba uždaro worker, kurie išgyvena sprendimą, rezultatus.
Trumpesnis laukimas Future nėra tas pats, kas jo pagrindinės užklausos sutrumpinimas. Taip pat rezultato atsisakymas ne iš karto atlaisvina visus tinklo išteklius.
Pirmas sėkmingas rezultatas taip pat tėra tik pirmoji sėkminga patikra. Jis gali priklausyti nuo planavimo, talpykloje esančių ryšių ir konkrečios patikros paskirties. Jis neįrodo, kad galinis taškas yra universaliai greičiausias ar kad tikroji užduotis pavyks.
Dažnai mažas saugomas telkinys su naujausiais stebėjimais yra paprastesnis nei lenktyniauti su visu sąrašu prieš kiekvieną atsisiuntimą. Naudokite tikros operacijos rezultatą įrašui atnaujinti kartu su kontroliuojama atkūrimo politika gedimams. Išankstinė patikra turėtų užsidirbti savo kainą, o ne iš įpročio padvigubinti kiekvieną užduotį.