Seite 1 von 1

Daten austausch zwischen zwei Threads

Verfasst: Sonntag 1. August 2021, 10:13
von Revolution
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

Re: Daten austausch zwischen zwei Threads

Verfasst: Sonntag 1. August 2021, 15:06
von Sirius3
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.

Re: Daten austausch zwischen zwei Threads

Verfasst: Sonntag 1. August 2021, 15:49
von rogerb
@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.