information aus anderem athread abrufen pyqt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
sauterle
User
Beiträge: 81
Registriert: Mittwoch 27. Juli 2022, 21:33

Hallo
wie ruft man eine aktuelle Information aus einem anderen thread mittels des signal slot mechanismus ab. zum besseren vorstellung dieser Fragestellung hilft ein Beispiel. Wenn man einen thread(Thread1) hat der eine Variable immer weiter nach oben zählt und einen anderen(Thread2) der zu einem bestimmten Zeitpunkt die zahl von Thread1 haben will hat. dann müsste dieser ein Signal an Thread1 senden und dann darauf warten das Thread1 ein Signal mit der aktuellen zahl zurückgibt um dann mit der zahl weiter-zurechnen. wie ist die konkrete Umsetzung einer solchen informationsabfrage oder gibt es oder gibt es eine besser Möglichkeit eine Information von einem anderen Thread abzufragen ?
LG sauterle
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sauterle: Das kann man über so ein Signal-Ping-Pong lösen, oder man fragt einfach den Wert direkt ab, gegebenenfalls durch ein Lock geschützt falls ein Zugriff auf die Daten nicht atomar ist. Das sollte bei *einem* Attribut dessen Wert unveränderbar/immutable ist, wie einem Python-`int` eigentlich ohne Lock gehen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
sauterle
User
Beiträge: 81
Registriert: Mittwoch 27. Juli 2022, 21:33

wie siht ein signalpingpong den aus? geht das mit dem direkten zugriff(mit lock) auch wenn man zum bekommen der information(in meinem fall eine liste) eine funktion ausführen muss?
LG sauterle
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sauterle: Das sieht so aus wie Du das im ersten Beitrag beschrieben hast. Hässlich. Und ich glaube ich habe das so noch nicht in der Praxis gesehen. Der ”direkte” Zugriff mit Lock muss über eine Funktion gehen, denn man will das Lock ja eher nicht von aussen belegen und freigeben. Du gibst dann da auch nicht die Liste selbst zurück, sondern eine Kopie, denn sonst würden ja zwei Threads auf der selben Liste operieren.

Ich würde das aber nur machen wenn es nicht anders geht. IMHO sollte Dein Thread der die Daten empfängt die nicht selbst in Listen speichern sondern direkt als Signal weitergeben. Die kann der Haupt-Thread dann in eine Queue speichern. Und einen Timer verwenden der in regelmässigen Zeitabständen die Anzeige aktualisiert. Wobei man die dann so wählt, dass die Anzeige flüssig ist, aber nicht so schnell, dass es den Rechner überfordert.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
sauterle
User
Beiträge: 81
Registriert: Mittwoch 27. Juli 2022, 21:33

Danke
Antworten