Threading-script nicht drucken auf die Konsole
dies ist wirklich verwirrend mich, und ich kann nicht finden die Antwort.
import thread
import time
import random
import sys
sys.stdout.flush()
def run_often(thread_name, sleep_time):
while True:
time.sleep(sleep_time)
print "%s" % (thread_name)
def run_randomly(thread_name, sleep_time):
while True:
time.sleep(sleep_time)
print "%s" % (thread_name)
thread.start_new_thread(run_often,("Often runs", 2))
thread.start_new_thread(run_randomly, ("Fast and random", random.random()))
das problem ist, dass diese nicht gedruckt. Im terminal, ich tippe python threading.py (das ist der Dateiname) und es wird kein Fehler ausgegeben. Damit der code kompiliert, aber es funktioniert einfach nicht drucken. In anderen Worten, dies ist, was passiert:
$ python threading.py
$
Ich Hinzugefügt sys.stdout.flush() denken, dass stdout benötigt werden zurückgesetzt, aber ohne Erfolg. Und wenn ich einen random-print-Anweisung wie "Hallo Welt" außerhalb der while-Schleife in eine Funktion, wird es gedruckt. Auch, wenn ich den genau gleiche code in ipython, druckt er perfekt. Das war kopiert aus einem YouTube-tutorial, und ist nicht mein eigener code.
Irgendwelche Ideen, warum es nicht gedruckt? Die Python, die bei mir läuft ist 2.7.8.
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entsprechend der
thread
Dokumentation,So ist es sehr wahrscheinlich, dass Ihr Kind threads werden beendet, bevor Sie können alles drucken, weil der main-thread endet zu schnell.
Die schnelle Lösung ist, um Ihren Haupt-thread warten vor dem Ende; fügen Sie ein
time.sleep
Methode die Letzte Zeile.Könnten Sie auch
threading
stattthread
, und verwenden SieThread.join
, die Kräfte der main-thread warten, bis der Kind-thread beendet.run_often
oderrun_randomly
.