Frühere | Chronologischer Index | Spätere | ||
Vorherige | Thematischer Index | Nächste |
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 > >
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
Frühere | Chronologischer Index | Spätere | ||
Vorherige | Thematischer Index | Nächste |
DMUG-Archiv, http://www.mathematica.ch/archiv.html