DMUG-Archiv 2021

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: [Dmug] Netzwerkfehler beim Abrufen einer Entity

Danke, habe das so gelöst (siehe Anhang).
Eine sehr gute Woche und darüber hinaus wünscht Peter

Am Mi., 4. Aug. 2021 um 21:35 Uhr schrieb Susanne & Udo Krause <
su.krause@XXXXXXX.ch>:

> Hallo Peter,
>
> das ist sehr allgemein geftragt, in den Bezug der Grössen (Ihr Beispiel
> sEntity) sollte man es nicht verladen, die übliche Vorgehensweise ist
>
>    - die möglichen Zustände definieren (Konstanten mit erinnerbarer
>    Bedeutung)
>       - initialisierung
>       - Verbingungsaufnahme
>       - Datenbezug
>       - Aktion_1
>       - Aktion_2
>       - Verbingungsabbau
>       - ende
>
> das Stichwort ist eine finite state machine; das kann mehrmals gemacht
> werden,
> wenn die Daten beisammen sind, kann man die Bearbeitung in eine eigene
> finite
> state machine auslagern (vulgo das nächste While ...) bis alles getan ist.
>
> Dann ist muss man sich die Reaktionen überlegen, ein permanentes While
> ohne Fehlerbehandlung (i.e. mal ein Päuschen einlegen) ist nicht sinnvoll,
> irgendwann soll auch mal aufgehört werden. Im Pseudocode
>
> enum {
>     none = 1,
>     init,
>     connect,
>     connecting,
>     connected,
>     interrupt,
>     querying,
>     gotit,
>     initfail,
>     connectfail,
>     ....
> } states;
>
> bool doContinue = true;
> int state = states.none;
> int ret = 1; -- 0 ist gut
> int maxFail = 7;
> int failed  = 0;
>
> while ( doContinue) {
>      switch (state) {
>         case states.none:
>             ret = prepare_initialisation();
>             if ( !ret)
>                 state = states.init;
>             else
>                 doContinue = false;
>             break;
>
>         case states.init:
>             ret = prepare_connection();
>             if ( !ret) {
>                 state = states.connect;
>                 failed = 0;
>             }
>             else {
>                 -- im Zustand init bleiben
>                 ++failed;
>                 if ( failed > maxFail)
>                     doContinue = false;
>             }
>             break;
>
>         ...
>         case states.connected:
>             ret = get_data( which ones etc);
>             if ( !ret) {
>                 state = state.querying;
>                 failed = 0;
>             }
>             else {
>                 if ( data_usable())
>                     state = state.querying; -- handle it
>                 else
>                     state = states.interrupted;
>                     -- set back;
>             }
>             break;
>
>         ...
>         case states.interrupted:
>             ret = set_back(); -- kann eine Pause enthalten, Kontrollen etc.
>             if ( !ret) {
>                 state = states.connected;
>                 failed = 0;
>             }
>             else {
>                 -- im Zustand interrupted bleiben
>                 ++failed;
>                 if ( failed > maxFail)
>                     doContinue = false;
>             }
>             break;
>
>         ...
>         default:
>             -- sollte einem nicht passieren: maule übel
>     }
> }
>
> das kann auch in Mathematica gemacht werden; um z.B. eine
> Internetadresse zu prüfen, kann es nützlich sein, von dort einen ping
> zu bekommen und erst nach Erhalt fortzusetzen, der bekannte R. E. Ference
> empfiehlt
>
> https://reference.wolfram.com/language/guide/ExternalOperations.html
>
> externe Operationen müssen sich auf die externen Gegebenheiten einstellen.
> Wenn kein Präsenzcheck angeboten wird, muss man auf etwas anderes
> ausweichen.
>
> Es kann auch sehr nützlich sein (check_data()) bereits erhaltene Daten
> lokal zu speichern, im Ernstfall kann dafür - falls vorhanden - eine
> Versionskontrolle verwendet werden ( erfolgreiche Änderungen werden
> committed oder pushed), so dass man in jedem Fall ein Stückchen weiterkommt
> und beim nächsten Run nicht erneut die Daten aus dem Netz holen muss,
> sondern aus der lokalen Quelle lädt und dann fortsetzt.
>
> HTH
>
> Udo.
>
>
>
>
> Am 04.08.2021 um 00:42 schrieb Peter Klamser via demug:
>
> ... es geht also darum so lange mit einer While Schleife Entity zu pollen,
> bis kein Fehler mehr vorliegt,
> Damit kann ich eine längere Berechnung bei einem Netzwerkfehler retten.
> Danke sagt Peter
>
> Am Di., 3. Aug. 2021 um 22:33 Uhr schrieb Peter Klamser <klamser@XXXXXXX.com> <klamser@XXXXXXX.com>:
>
>
> Hallo,
>
> beim Abrufen einer Entity kann ein Netzwerkfehler auftreten, wenn z.B. der
> ISP meint, er müsse irgendwas ändern, wobei dann kein Zugang zu WRI besteht.
>
> Ich habe das versucht mit einer Enclose ConfirmQuiet konstrukt abzufangen.
> Aber so ganz klappt das nicht.
>
> Wie geht das?
>
> Eine gute Woche wünscht Peter
>
>
> _______________________________________________
> DMUG Deutschsprachiges Mathematica-Forum demug@mathematica.chhttp://www.mathematica.ch/mailman/listinfo/demug
> Archiv: http://www.mathematica.ch/archiv.html
>
>

Attachment: stored Entity with managing network connecting errors.nb
Description: application/vnd.wolfram.nb

_______________________________________________
DMUG Deutschsprachiges Mathematica-Forum demug@XXXXXXX.ch
http://www.mathematica.ch/mailman/listinfo/demug
Archiv: http://www.mathematica.ch/archiv.html
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html