Hallo,
ich suche eine Möglichkeit bei der Nutzung von Threads in einer Client- Server Kommunikation Values zu "returnen". Also ich möchte eigentlich den Thread selbst nicht unbedingt beenden müssen um an die Variable zu kommen (wenn ich das aber tun müsste würde ich damit leben können).
Ich spreche natürlich an eine Übergabe an den Mutter-Thread
So richtig schlau werde ich aus meinen Suchergebnissen bei Dr.Google nicht. Vielleicht übersehe ich aber auch etwas oder mache es mal wieder komplizierter als es ist...?
Betreffend Python3 mit dem Modul threading.
LG
Thread Variable an Mutterthread übergeben
Danke! Ich war nicht sicher welche Möglichkeit für mich am meisten Sinn macht.
Jedoch klappt es noch nicht so ganz wie ich mir das erhofft hatte. Was übersehe ich hier?!
die Funktion sieht (auf das Wesentliche reduziert) so aus:
Pardon- hier der Traceback:
Jedoch klappt es noch nicht so ganz wie ich mir das erhofft hatte. Was übersehe ich hier?!
Code: Alles auswählen
q = queue.Queue
t1 = threading.Thread(target=msg_receive, args=(conn, IP, q))
t1.start()
my_thread_result = q.get()
print(my_thread_result)
die Funktion sieht (auf das Wesentliche reduziert) so aus:
Code: Alles auswählen
def msg_receive(conn, IP, q):
msg = conn.recv(4096).decode("utf-8")
q.put(msg)
Code: Alles auswählen
my_thread_result = q.get()
TypeError: get() missing 1 required positional argument: 'self'
Zuletzt geändert von Finux am Freitag 25. Oktober 2019, 10:58, insgesamt 1-mal geändert.
hatte mich an folgendem bsp orientiert:
bin jedoch nicht wirklich firm in der oop. wieso muss ich hier zwingend aus self referenzieren? der thread ist doch klar (q wurde ja übergeben), es wurde mit put "gesetzt" und mit get wieder abgeholt..?!
Code: Alles auswählen
import queue
import threading
# creating queue instance
q = queue.Queue()
# creating threading class
class AnyThread():
def __init__ (self):
threading.Thread.__init__(self)
def run(self, a, b):
# in this class and function we will put our execution test function
test(a, b)
t = AnyThread()
# having our test target function
def test(a, b):
# do something in this function:
result = a + b
# and put result to a queue instance
q.put(result)
for i in range(3): #calling our threading fucntion 3 times (just for example)
t.run(3+i, 2+i)
output = q.get() # here we get output from queue instance
print(output)
>>> 5
>>> 7
>>> 9
bin jedoch nicht wirklich firm in der oop. wieso muss ich hier zwingend aus self referenzieren? der thread ist doch klar (q wurde ja übergeben), es wurde mit put "gesetzt" und mit get wieder abgeholt..?!
Du mußt auch eine Instanz von Queue anlegen (Klammern nicht vergessen!):
Code: Alles auswählen
q = queue.Queue() # statt q = queue.Queue
@Finux: das Beispiel ist ja auch totaler Schrott. nur weil eine Klasse `Thread` im Namen hat, ist das noch lange kein Thread. Und irgendwelche __init__-Funktionen von fremden Klassen aufzurufen macht auch noch keinen Thread. Stackoverflow taugt nichts als Einstiegslektüre, weil oft die Leute, die da Antworten genauso Anfänger sind, wie die Fragenden.
Dein Code-Schnippsel ist dagegen doch ganz gut, bis darauf, dass man auch eine Queue-Instanz erzeugen muß, wie kbr schon schrieb.
Dein Code-Schnippsel ist dagegen doch ganz gut, bis darauf, dass man auch eine Queue-Instanz erzeugen muß, wie kbr schon schrieb.