erstens einige Hintergrund.Veraltete Daten von TCP-Socket Worker
Ich versuche, einen einfachen Webserver zu schreiben, der auf flask-appbuilder basiert. Diese Anwendung hat eine Socket TCP-Verbindung geöffnet und sollte eine undefinierte Anzahl von Anforderungen akzeptieren.
Wenn jemand mit der Steckdose verbinden (lassen Sie mit Telnet sagen), wird in der Lage sein, seinen Benutzernamen zu senden, und die Buchse, wird überprüft, ob der Benutzer oder nicht auf der Datenbank aktiv ist und er diesen Wert zurück.
Um loszulegen, fing ich an, in einigen vorhandenen Lösungen zu suchen, und ich fand dieses Simple Network UDP Listen in Flask or Pyramid Welches auf einem UDP-Sockel basiert, aber das Konzept ist ziemlich ähnlich.
Die Anwendung ausgeführt, die Benutzer können eine Verbindung mit dem Socket herstellen, aber wann immer sie ihren Benutzer senden, ist der zurückgegebene Wert nicht das, was die Datenbank festgelegt (aktiviert oder deaktiviert), und ich kann nicht verstehen, warum.
Die Webanwendung reagiert ordnungsgemäß auf die Datenbankänderungen. Aber die SQL-Abfrage aus dem Socket, scheint eine Art alte (veraltete) Daten zurück zu geben, anstatt neue aus der Datenbank zu holen.
Ich füge hier einen Referenzcode hinzu, vielleicht mache ich einen dummen Fehler.
Hier ist, wie ich Sellerie bin Initialisierung:
class FlaskCelery(Celery):
def __init__(self, *args, **kwargs):
super(FlaskCelery, self).__init__(*args, **kwargs)
self.patch_task()
if 'app' in kwargs:
self.init_app(kwargs['app'])
def patch_task(self):
TaskBase = self.Task
_celery = self
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
if flask.has_app_context():
return TaskBase.__call__(self, *args, **kwargs)
else:
with _celery.app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
self.Task = ContextTask
def init_app(self, app):
self.app = app
print app.config
self.config_from_object(app.config)
celery = FlaskCelery()
celery.init_app(app)
hier ist der Arbeiter-Code:
@celery.task(name='listen_to_tcp', serializer='json', bind=True)
def listen_to_tcp(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('0.0.0.0', app.config['SOCKET_PORT']))
sock.listen(0)
while True:
connection, client_address = sock.accept()
try:
while True:
data = connection.recv(1024)
data = data.strip()
if data:
qresult = db.session.query(MyUser).filter_by(username=data).one()
connection.sendall(qresult.is_active)
else:
break
finally:
connection.close()
listen_to_tcp.delay()
Dank jemand in der Lage mir wiht dies zu helfen. Prost. L.