Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

11

09.08.2016, 12:53

Bist du dir sicher, dass das self.connected = True gesetzt wird BEVOR send_to_client aufgerufen wird? Also True wird bevor False ausgegeben?

12

09.08.2016, 13:06

Ja 100%. Die Funktion send_to_client rufe ich manuell auf, indem ich auf einen Button klicke. Ausserdem lasse ich mir vorher ja diese Sachen hier ausgeben:

Quellcode

1
2
print ('connection from', self.client_address, file=sys.stderr)
print (self.connected, file=sys.stderr) # welches hier True ausgibt


und in der send_to client gebe ich dann wieder die Variable self.connected aus (nur wenn ich manuell einen Button geklickt habe, wird die Funktion aufgerufen):

Quellcode

1
print (self.connected, file=sys.stderr) # welches hier dann aber False ausgibt


Das alles wirkt halt so als ob die Variablen die ich innerhalb der Funktion "run" definiere, nur lokal definiert/erstellt sind.

MfG

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

13

09.08.2016, 14:37

Wie wird send_to_client aufgerufen? Bist du dir sicher, dass du nicht versehentlich eine neue Instanz von Server anlegst oder die Methode wie eine statische Funktion aufrufst?
Was soll weiterhin die Zeile threading.Thread.__init__(self) bewirken?

Nachtrag:
Ich habe gerade zum Test ein einfaches Script geschrieben, das wie erwartet durchläuft, heißt, die Änderung der Variable wird richtig im Thread erkannt:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import threading
import time

class Test():
    
    def __init__(self):
        self.connected = True
        self.thread = threading.Thread(target = self.run)
        self.thread.start()
        
    def run(self):
        while self.connected:
            print(self.connected)
            time.sleep(0.5)
        print(self.connected)

test = Test()
print("started")
time.sleep(3)
print("3")
time.sleep(3)
print("2")
time.sleep(3)
print("1")
time.sleep(3)
test.connected = False
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sacaldur« (09.08.2016, 15:05)


14

09.08.2016, 15:11

Der Aufruf findet so statt:

Quellcode

1
2
3
4
5
6
7
8
@app.route('/robotic_arm', methods=["GET","POST"])
def robotic_arm():
    if request.method == "POST":
            s.send_to_client(request.data)

    return render_template(
        'robotic_arm.html'
    )


Sobald auf der Seite ein Button geklickt wird, soll ein Zeichen zurück an den Server gesendet werden.

Weiter oben erzeuge ich noch das Objekt von Server:

Quellcode

1
2
from FlaskWebProject1 import server
s = server.Server()


Ps: Der Sinn von "threading.Thread.__init__(self)" ist mir auch nicht klar, aber in anderen Foren wurde das als "Lösung" beschrieben...

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

15

09.08.2016, 15:21

Ich hatte es immer nur dann gesehen, wenn zusätzlich die Klasse von Thread abgeleitet war. So wurde dann der "übergeordnete" Konstruktor aufgerufen. Da diese Vererbung bei dir nicht vorhanden ist, brauchst du den Aufruf auch nicht.
Bedenke, dass ich meinen letzten Beitrag editiert und funktionierenden Code gepostet habe. Es liegt also nicht an den Membervariablen, sondern an anderen Umständen. Entweder wird der Aufruf auf unterschiedlichen Objekten durchgeführt, oder der Wert wird zwischenzeitlich angepasst.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

16

10.08.2016, 13:10

Ich habe jetzt alles unter Linux implementiert, und siehe da, es funktioniert alles einwandfrei! Trotzdem Danke für eure Hilfe :thumbsup:

Werbeanzeige