Websocket in run Methode von PyGlet, oder auch eines anderen loops.

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
mindthegap
User
Beiträge: 4
Registriert: Montag 19. Oktober 2015, 13:46

Ich versuche ein Websocket in ein Python Pyglet Programm zu integrieren. Leider fehlt mir komplett der Ansatz wie ich den Pyglet.app.run() Aufruf und den

Code: Alles auswählen

asyncio.get_event_loop().run_until_complete(websockets.serve(echo, 'localhost', 8888))
asyncio.get_event_loop().run_forever()

Code: Alles auswählen

async def echo(websocket, path):
    await pyglet.app.run()
    await websocket.send(myDistance )
    print(myDistance )
    time.sleep(0.02)

zusammen bekomme, beide blockieren sich ja gegenseitig.

das Pyglet Programm liest einen Stream einer Intel Realsense Kamera ein und filtert etwas die Pointcloud. das funktioniert soweit wunderbar. Im Wesentlichen erhalte ich dann ein paar Distanzwerte die ich gerne via Websocket weiterschicken möchte.

ich versuche das auf den wesentliche part zu reduzieren.
also bisher gibts eine run Methode die ich nach dem Setup Aufrufe:

Code: Alles auswählen

pyglet.clock.schedule(run)

try:
    pyglet.app.run()

Irgendwie habe ich einen Knoten in der Birne, wie kann ich mir jetzt ein Socket öffnen, und x Millisekunden die Werte rausschicken.

ERGÄNZUNG: ich hatte vergessen daß ich einen Browser als Client habe, ansonsten könnte ich natürlich dort einen Server öffnen und dann ein Socket und send benutzen. das kenne ich und funzt fein, aber Browser können keine Webscket Server sein...
Benutzeravatar
__blackjack__
User
Beiträge: 13007
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mindthegap: Man kann ``await`` nicht einfach mit irgendwelchen beliebigen Aufrufen verwenden. Das was man da aufruft, muss schon was zurückgeben was ”awaitable” ist, und zwar *sofort*. `pyglet.app.run()` gibt nicht nur nicht sofort etwas zurück, sondern nach der langen Zeit die es läuft auch noch gar nichts, also das implizite `None`.

Ich würde den ``async``-Kram in einem eigenen Thread laufen lassen. GUIs brauchen in der Regel den Hauptthread.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten