Multithreading in Python 3.7 bzw. PyQt4

Gast #3790299
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.
#3790380
Vergiss Threads in diesem Fall, die sind der falsche Ansatz. Für sowas 
gibt's die Event Loop. Threads sind hier unnötig.

Aber erklär' nochmal genauer was du machen willst, das habe ich nicht 
ganz verstanden.

Python 3.7 gibt es übrigens nicht.
Gast #3790402
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
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
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.