Hier ist ein Beispielprogramm, das ich für Python-Thread-Sequenz zu testen liefPython threading Sequenz
import threading
import time
import logging
import random
logging.basicConfig(level=logging.DEBUG,
format = '%(asctime)s (%(threadName)-10s) %(message)s')
def worker():
t = threading.currentThread()
pause = random.randint(1,10)
logging.debug('sleeping %s', pause)
time.sleep(pause)
logging.debug('ending sleep')
return
for i in range(3):
t = threading.Thread(target=worker,name='t%s'%i)
t.setDaemon(True)
t.start()
main_thread = threading.currentThread()
for t in threading.enumerate():
if t is main_thread:
continue
logging.debug('joining %s', t.getName())
t.join()
Hier ist die Ausgabe eines Programmlaufs ist:
2016-11-22 12:59:12,052 (t0 ) sleeping 3
2016-11-22 12:59:12,052 (t1 ) sleeping 3
2016-11-22 12:59:12,052 (t2 ) sleeping 8
2016-11-22 12:59:12,052 (MainThread) joining t0
2016-11-22 12:59:15,055 (t0 ) ending sleep
2016-11-22 12:59:15,056 (MainThread) joining t2
2016-11-22 12:59:15,056 (t1 ) ending sleep
2016-11-22 12:59:20,054 (t2 ) ending sleep
2016-11-22 12:59:20,054 (MainThread) joining t1
Hinweis des Verbindungs Auftrag ist nicht konsistent entweder mit Listenreihenfolge oder mit der Timing-Reihenfolge. Die Verknüpfungsreihenfolge des Haupt-Threads sollte t0 -> t1 -> t2 Thread-Sequenz aufrufen, aber es ist -> t2 -> t1.
Was passiert hier?
warum würden Sie das threading.enumerate() annehmen würde sie in der gleichen Reihenfolge zurückkehren sie erstellt? – bravosierra99
Schritt 1 beim Lernen von Multithread: Ihre Threads werden in beliebiger Reihenfolge ausgeführt, und Sie können nichts dagegen tun. (Nun, das kannst du. Aber wenn du das tust, verlierst du alle und alle Gewinne, die du mit Multithreading erzielen wolltest.) – Delioth