Seite 1 von 1

print und input funktionen im thread

Verfasst: Sonntag 10. Mai 2020, 23:11
von justAskingQuestions
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.

Re: print und input funktionen im thread

Verfasst: Montag 11. Mai 2020, 07:46
von Sirius3
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.

Re: print und input funktionen im thread

Verfasst: Montag 11. Mai 2020, 10:36
von __blackjack__
@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()