Flask inherente Klassen
Verfasst: Mittwoch 3. März 2021, 12:44
Hallo,
ich hätte da mal eine Frage bezüglich von Flask und Klassen.
Ich habe mir derzeit eine Klasse gebaut
(mein Code ist noch umfangreicher, tut aber wahrscheinlich hier nichts zur Sache, ich hab hier mal ein Minimalbeispiel draus gemacht.)
Mein Problem ist jetzt folgendes:
Wie man im Code erkennen kann wird die function getstatus als Thread aufgerufen und es werden Daten abgefragt. Die Daten werden dann in die Variable self.data geschrieben. Wenn ich mir das per Print anschaue funktioniert das auch so wie es sein soll.
Wenn ich jetzt aber über Flask die Webseite öffne und den Link /apexstatus ausprobiere, so bekomme ich keine aktuellen Daten, sondern nur die, mit welchem ich mein Objekt initialisiert habe. (Also nur die aus der __init__(self), nicht aber die aus der run(self, config)
Es scheint mir so, dass bei der Initialisierung des Objektes die Werte gesetzt werden und dann zwei "verschiedene" self variablen durch mein Objekt geistern. Kann es sein, dass der Thread hier irgendetwas komisches macht?
Ich bekomme zumindest als Fehler beim Aufrufen, dass self.data nicht in Apex vorhanden ist. Was mache ich falsch???
ich hätte da mal eine Frage bezüglich von Flask und Klassen.
Ich habe mir derzeit eine Klasse gebaut
Code: Alles auswählen
class sqlinit():
def openconnection(self, config):
pass
class Apex(FlaskView, sqlinit):
def __init__(self):
#super().__init__()
pass
def run(self, config):
self.config = config
super().openconnection(self.config)
self.data = []
from threading import Thread
x = Thread(target=self.getstatus)
x.start()
return self
def getstatus(self):
k=0
while True:
time.sleep(2)
k+=1
print(k)
self.data = {"data": k}
@route('/')
def index(self):
return "<h1>This is my Apex class</h1>"
@route('/apexstatus')
def apexstatus(self):
return self.data
if __name__ == '__main__':
config = {}
app = Flask(__name__)
apex = Apex().run(config).register(app,route_base = '/')
app.run(debug=True)
Mein Problem ist jetzt folgendes:
Wie man im Code erkennen kann wird die function getstatus als Thread aufgerufen und es werden Daten abgefragt. Die Daten werden dann in die Variable self.data geschrieben. Wenn ich mir das per Print anschaue funktioniert das auch so wie es sein soll.
Wenn ich jetzt aber über Flask die Webseite öffne und den Link /apexstatus ausprobiere, so bekomme ich keine aktuellen Daten, sondern nur die, mit welchem ich mein Objekt initialisiert habe. (Also nur die aus der __init__(self), nicht aber die aus der run(self, config)
Es scheint mir so, dass bei der Initialisierung des Objektes die Werte gesetzt werden und dann zwei "verschiedene" self variablen durch mein Objekt geistern. Kann es sein, dass der Thread hier irgendetwas komisches macht?
Ich bekomme zumindest als Fehler beim Aufrufen, dass self.data nicht in Apex vorhanden ist. Was mache ich falsch???