Multithreading in Python 3.7 bzw. PyQt4

Gast #3790299
Lesenswert?

Hallo,

folgende Aufgabenstellung möchte ich lösen, dazu ist mir bis jetzt nur 
Multithreading als Lösungsweg eingefallen.

Ich habe mir in PyQt4 ein QLineedit und einen QTextbrowser erstellt.
Ich möchte das diese beiden Widgets unabhängig voneinanderr sind. Das 
bedeutet ich möchte parallel Daten per QTextbrwser anzeigen lassen und 
Daten über das Lineedit senden.

Von der Struktur her müsste die Ausgabe über den Textbrowser ein 
Unterthread vom Hauptthread sein. Der Unterthread soll sich auch über 
ein  ein SIGNAL von z.B. einm Button ausschalten lassen.
1
import _thread, time
2

3
thread_control = True
4

5

6
def bla():
7
    global thread_control
8
    a = 0
9
    while thread_control:
10
        a+=1
11
        print(a)
12

13

14
_thread.start_new_thread(bla,())
15
time.sleep(3)
16
thread_control = False
Das läuft bis jetzt, ist aber im OOP Ansatz nicht anwendbar. Übrig 
bleibden noch das threading Modul oder QThread.

Falls jemand ein paar einfache Codebeispiel zu dem Thema hätte, wäre das 
sehr nett.
Gast #3790402
Lesenswert?

Sorry, 3.4 ^^.

Ich habe einen Inputstream und einen Outputstream aus meinem Programm. 
Ich möchte auf beide parallel zugreifen. Also senden während ich 
empfange und empfangen während ich sende.

Ich wollte eine Empfangschleife bauen die durchgehend empfängt und diese 
in einen zweiten Thread auslagern, während ich im Hauptthread neben 
anderen Dingen auch senden kann.
Ich hoffe das ist verständlicher?
Gast #3790407
Lesenswert?

Zur Ergänzung: Ich weis nicht wann ich Daten erhalte, das heist ich muss 
immer Empfangsbereit sein. Eine Art Interrupt wäre sonst auch brauchbar, 
allerdings kenne ich so etwas nur von Mikrocontrollern.
#3790535
Lesenswert?

Ok -- am besten, du postest mal den Code.

Du kannst erstmal sowas versuchen wie (Pseudocode)
1
def check_new_data():
2
  if bus.data_available():
3
     data = bus.read_data()
4
     # ... Daten verarbeiten
5

6
t = QTimer()
7
t.setTimeout(5ms)
8
t.timeout.connect(check_new_data)
9
t.start()

Mit sowas kuckst du einfach alle 5ms ob neue Daten auf dem Bus sind und 
verarbeitest die synchron wenn ja. Wenn das für deinen Zweck reicht, 
kannst du dir das Thread-Gedöhns sparen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren