Globale Namen definieren ???

Code-Stücke können hier veröffentlicht werden.
BlackJack

@jerch: Wie gesagt das kommt darauf an was das bedeutet und wer es wieder löscht und was zwischen Abgfragen und Setzen/Löschen auf den beiden Seiten passiert. Das Flag selber schützt ja nichts oder synchronisiert irgendwie vor gleichzeitigem verändern von gemeinsam benutzten Ressourcen. Zum Beispiel E-Mails auf einem Server, falls der Hauptthread das Flag als Anlass nimmt neue Mails zu verarbeiten. Wirklich sicher erscheint mir das nur wenn der Hauptthread das tatsächlich nur als Flag sieht das er nur liest, und bei dem es nichts ausmacht wenn er nicht alle Änderungen tatsächlich mitbekommt.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Hier noch ein aktuelles Beispiel, wo ich nicht weiss, wie ich es anders lösen soll.

Code: Alles auswählen

x = 150


@route('/home', method='GET')
def index():
    global x
    p = pipan.PiPan()
     
    if request.GET.get("right"):
        right = int(request.GET.get("right"))
        x = x - right
        print x
        p.do_pan(x)
Der Startwert ist 150 und von diesem Wert wird nach jedem Buttonkick 1 abgezogen. Mit jedem Klick wird aber die Funktion neu aufgerufen. Wie kann ich hier auf global verzichten?

mfg
BlackJack

@lackschuh: Ich würde mal behaupten der Code ist fehlerhaft weil er davon ausgeht, dass jede Webanfrage vom selben Prozess beantwortet wird, was man so allgemein nicht garantieren kann.

Man würde hier den Wert immer mit durch die Anfrage schleifen, oder in ein Cookie packen, oder ein Session-Cookie verwenden und den Wert in einer Datebank speichern wo man ihn mit Hilfe des Session-Cookie dem Client zuordnen kann.

Es sei denn der Wert ist tatsächlich global für alle Anfragen gültig, egal von welchem Client, dann kann der einfach so in die Datenbank.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Bei dem Beispiel geht es darum, zwei Servos, auf welchen eine Kamara montiert ist, horizontal und vertikal zu steuern. 150 ist Mitte laut pipan-Doku. Wäre eine DB in diesem Fall nicht 'overpowered'?
BlackJack

@lackschuh: Würde ich nicht sagen. Bevor man selber etwas schreibt was die Daten persistent und sicher/konsistent bei nebenläufigem Zugriff speichert, kann man auch gleich eine Datenbank verwenden. Weniger potential etwas falsch zu machen und letztendlich wohl auch einfacher zu benutzen als sich so etwas selber zu schreiben. Man muss ja keine Oracle Enterprise Datenbank aufsetzen, SQLite3 tut's ja auch.

Andererseits könnte es Sinn machen die Servosteuerung in einen eigenen Server zu stecken um damit zu erzwingen dass das Gerät immer nur von einem Prozess aus angesteuert wird. Dann könnte sich dieser Prozess auch den aktuellen Zustand merken und ihn abfragbar machen.
Antworten