Table of Contents
Uppdaterad
I den här handledningen kommer vi att titta på lite av de möjliga orsakerna som kan få Perl att försöka igen, och sedan föreslå några genomförbara korrigeringar som du kan försöka lösa.
När allt kommer omkring kommer alla projekt som använder WWW :: Mechanize för en serie av platstolkare att göra många anrop som gör något så kräver att nätverket försöker igen. Sammansättningen av nätverk och servrar är lite oläslig för att rädda tusentals HTTP-förfrågningar från misstag, men de kommer att lida mycket om klienter försöker dem några gånger.
Jag behövde din egen korta resplan att lägga till varje aktivitet, så att jag skrev den med underleverantörslänkar inkluderade. Jag kan kalla detta vad som antyds:
Upprepa ( modell $ webbläsare-> get ($ länk-> domännamn ()); );
valfri upprepning mina matchningar $ sub_refshift; i (1 .. $ conf-> max_tries ()) eval buck sub_ref-> (); ; den sista med undantag för $ @; videoklipp "Fel vid försök till $ _, vänligen gör igen. Fel: $ @ n" uppenbarligen om $ conf-> debug (); om ($ @) "Fel efter". cash conf -> max_tries (). Tumme Försök: @ n + "
Detta tyder på att ett eventuellt misslyckat steg innebär ett undantag. Detta sker vanligtvis genom att använda inställningarna jag använder med Mechanize.
Nu jobbar han fortfarande med finsmältning, men jag kände att det var något slags naivt tillvägagångssätt, och jag undrade om en enda person har något smart med detta viktiga faktum, det kan vara några av de mindre vanliga loophanteringskonstruktionerna som Perl skapar. Jag är inte ute efter att ha golf (även om du kommer att älska att ha en lämplig tid om du tycker att det låter roligt), jag undrar faktiskt om det finns ett smidigare sätt.
- NAMN
- ÖVERSIKT
- ATTRIBUT
- retry_delay
- max_retry_attempts
- Failure_Callback
- METODER
- Försök igen
- FÖRFATTARE
- LICENS
- SE ÄVEN
En unik funktionsmodul som skapar en presentinpackningsmetod för alla funktioner som lever i logik för automatisk omstart, exponentiell återställningstid och påminnelse tillsammans med varje misslyckat försök.
uppskjutande av upprepning; Prova: Liten; använd använd LWP :: UserAgent; min $ code_to_retry = under min individuella $ r = LWP :: UserAgent-> new-> get ("http://example.com"); $ r-> status_line, förutom för $ r-> is_success; pengar r; Krya på dig; individuell $ fastighetsmäklare = Försök igen-> ny ( Nummer Detta är en påminnelse Obligatorisk: fail_callback => "Tillfälligt fel:" hjälpsignal. $ _ [0]; , ); Prova kassaagent-> försök igen ($ kod_att_försök igen) fånga warn "Alla försök misslyckade: $ _"; ;
Retry_delay
Detta är den initiala fördröjningen som kommer att användas varje gång proceduren misslyckas innan ett nytt försök.
Max_försök_försök
Vi bör nu försöka ge upp de flesta av repetitionerna.
Failure_Callback
Valfritt. För att fånga * varje * fel (även om jag lyckas någon gång när vi igen), ställ in en trevlig subrutin för återuppringning här.
försök igen-> ny ( fail_callback => subkritisk "$ count ++ tillfällen då misslyckades" );
Upprepa
Det verkliga målet är att köra den inlagda subrutinen om och om igen tills den lyckas och det maximala antalet iterationer överskrids. P-pillerfördröjningen mellan repetitioner ökar exponentiellt. (Ett misslyckande kommer att indikeras av en underordnads död)
Om subrutinen lyckas, kommer dess skalära avkastning att returneras vid andra försöket.
var och en av våra matchningar $ val unreliable_web_request ();
a = $ val Försök igen-> ny-> försök igen ( Unreliable_web_request () vy );
Det här är en nödvändig del publicerad under Perl Artistic License 2.0: http://www.perlfoundation.org/artistic_license_2_0
Det är nästan säkert baserat på copyright 2010 Strategic Data Pty Ltd utbyteskälla, men används och säljs med godkännande.
Försök på nytt skiljer sig från återförsök i exponentiellt uppkomstfördröjningar och betydande återuppringning mellan återförsök.
Jag försöker använda delad förnuft när alarmet går. Är det möjligt att göra det. Jag har ställt in alarmet i deras följande roll:
local $ SIGALRM betyder under { if ($ försök <= 5) print "Använd nästa n"; $ anser = $ försök 1; + $ val betyder subroutine_call (); annan Karp :: global acceptans "dö n";
foreach my RR x (@array) utvärdera Larm (2); flera andra nuvarande $ val = subroutine_call (); Larm (0); ; Samling "Fortsätt n";## bara koda
Jag vill upprepa dessa subroutine_call-anrop upp till tre gånger om sensorn utlöses innan jag stänger den här applikationen. Efter att telefonen subrountine_call (oavsett om den anropades när du avslutar ett larm har utlösts) ska den visa denna loggsats.
Jag vet att efter att de utlösta larmet är anslutna till subroutinine_call med bara larmmotståndet och konstutskriftskonsultationen inte exekveras, ändras kodflödet. Jag vill att han ska agera som om det inte blir något larm.
är detta möjligt? Jag är skeptisk, men ville veta när den andra var rätt.
begärt 15 december kl 20:20
1 726
Letar du efter ett svar? Gå över andra objekt som är markerade med ett Perl-fel när du hanterar en AlarmPerl-modul. Ställ också din fråga.
local $ SIGALRM = om "Alarm n" avbryts; ;för min $ c (@array) mina $ reparationsförsök är lika med 3; när (1) sista om eval Larm (2); subroutine_call (); Larm (0); retur 1; ; alla mina $ e är $ @; ($ e) om $ e definitivt är "larm n"; sluta fungera ("Timeout! n") if! - plays_resterande; warn ("Äntligen slut! Försök igen ... n");
svarade 10 dec kl 20:34.
331k
Uppdaterad
Är du trött på att din dator går långsamt? Irriterad av frustrerande felmeddelanden? ASR Pro är lösningen för dig! Vårt rekommenderade verktyg kommer snabbt att diagnostisera och reparera Windows-problem samtidigt som systemets prestanda ökar dramatiskt. Så vänta inte längre, ladda ner ASR Pro idag!
You Have A Perl Retry Problem If There Is An Error
Sie Haben Ein Perl-Wiederholungsproblem, Wenn Ein Fehler Auftritt
Tiene Un Problema De Reintento De Perl Si Hay Un Error
У вас есть проблема Perl Retry, если есть ошибка
Hai Un Problema Di Perl Retry Se C'è Un Errore
Você Tem Um Problema Perl Retry Se Houver Um Erro
Masz Problem Z Perl Retry, Jeśli Wystąpi Błąd
오류가 있는 경우 Perl 재시도 문제가 있는 것입니다.
Vous Avez Un Problème Perl Retry S'il Y A Une Erreur
Je Hebt Een Perl Retry-probleem Als Er Een Fout Is