print und input funktionen im thread

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
justAskingQuestions
User
Beiträge: 1
Registriert: Sonntag 10. Mai 2020, 23:05

Hey leute. Ich bin neu hier und brauche bei diesem Problem dringend hilfe.
Ich schreibe gerade ein program allerdings komme ich nicht weiter.
Zusammengefasst lasst sich sagen das ich zwei threads laufen hab. Ein thread printed etwas auf den bildschirm, währrend der andere nach input fragt.
Das führt logischerweise zu problemen, da dann im input gerne der output von print steht.
Hört sich wirr an, deshalb poste ich mal beispielcode, der genau mein problem darsellt.

Code: Alles auswählen

import threading
import time

def goOn():
    while True:
        print("#########")
        time.sleep(1)
        
def ask():
    while True:
        x = input("YOUR PROMPT: ")


threading.Thread(target = goOn, args= ()).start()
threading.Thread(target = ask, args= ()).start()
Kann jemand testen wenn er will. Da steht dann aber sowas da:
YOUR PROMPT: ########
Was könnte man machen damit print ausgeführt wird aber input() dann einfach in einer neuen zeile weiterläuft ?
VIELEN DANK IM VORRAUS. BIN AM VERZWEIFELN.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum verwendest Du Threads? Was willst Du eigentlich machen?
Konsolenprogramme sehen das nicht vor. Was Du willst geht nur mit TUI oder GUI. Und auch dann ist das mit Threads nicht ganz so einfach.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@justAskingQuestions: Anmerkungen zum Quelltext:

Namen werden in Python klein_mit_unterstrichen geschrieben. Also `go_on()` statt `goOn()`. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Wenn `target` keine Argumente erwartet braucht man `args` auch nicht angeben, das ist der Default-Wert.

Das Programm ist unnötig schwer mit Strg+C abbrechbar, weil es a) keine Daemon-Threads sind und b) unnötigerweise zwei zusätzlich Threads gestartet werden, statt das die eine Aufgabe in *einem* zusätzlichen Thread läuft und die andere im Hauptthread.

Code: Alles auswählen

#!/usr/bin/env python3
import threading
import time


def go_on():
    while True:
        print("#########")
        time.sleep(1)


def ask():
    while True:
        input("YOUR PROMPT: ")


def main():
    threading.Thread(target=go_on, daemon=True).start()
    ask()


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten