Daten austausch zwischen zwei Threads

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Revolution
User
Beiträge: 1
Registriert: Sonntag 1. August 2021, 08:08

Hallo zusammen,

Ich hab da ein kleines Problem bei dem ich bei google nicht wirklich weiter gekommen bin.

Ich hab zwei threads einen Socket threads der Daten im Netz bereitstellen soll und Einen Thread der die Daten für diesen Sammelt.

Ich hab gelernt globale Variablen sind böse und man soll Queue benutzen. Ok nur Probleme ist nur das die Daten nach dem abholen gelöscht werden. Das ist suboptimal da immer eine Aussage an den anderen Thread erfolgen soll. Dieser frägt zyklisch ab.

So wie stelle ich das am dümmsten und einfachsten an.

Was hübsches einfaches wäre toll meine programmier Kenntnisse würde ich selbst eher als fahrlässig beschreiben xD

Danke
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich verstehe Deine Problembeschreibung nicht. Was soll eine "Aussage an den anderen Thread erfolgen soll" bedeuten?
Zeige Code und einen Beispielablauf, an dem man erkennen kann, was welcher Thread macht.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Revolution,

Das mit dem Löschen der Daten hab ich auch nicht verstanden.
Hier ist ein Beispiel mit zwei Threads und einer gemeinsamen Queue.
'collect' sammelt Daten - hier Zufallszahlen und übergibt sie per Queue an den anderen Thread 'provide'. Der stellt sie in Form von print() (Bei dir die Socket) zur Verfügung.

Code: Alles auswählen

import threading
import random
import queue
import time


def provide(common_queue):
    while True:
        data = common_queue.get()
        print(data)

def collect(common_queue):
    while True:
        data = random.random()
        common_queue.put(data)
        time.sleep(1)


common_queue = queue.Queue()
provider = threading.Thread(target=provide, args=(common_queue,))
collecter = threading.Thread(target=collect, args=(common_queue,))

provider.start()
collecter.start()
Eine schöne Informationsquelle zum Thema Threading mit vielen Beispielen:
https://realpython.com/intro-to-python-threading/

Falls das nicht passt must du vielleicht mal deinen Code posten und wir schauen, was das Problem ist.
Antworten