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.
# Telnetverbinduung zu jedem Switch starten
for IP in switch_liste:
t = Thread(target=My_tel2switch.sw_tftpupload,args=(IP,))
t.start()
#Backupdateien ordnen
for IP in switch_liste:
x = Thread(target=My_tel2switch.d_handle,args=(IP,))
x.start()
ich möchte die 2. for-schleife erst beginnen sobald der letzte thread der ersten for-schleife beendet/abgearbeitet ist
Nein, angenommen du hast 3 Threads t1, t2 und t3 und du rufst nur die t1.join auf, wird auch nur so lange gewartet bis dieser Thread "fertig" ist. Deshalb macht man das oft so:
#Thread join erstellen
t = str("t"+ str(i))
i = int(i) + 1
# Telnetverbinduung zu jedem Switch starten
for IP in switch_liste:
t = Thread(target=My_tel2switch.sw_tftpupload,args=(IP,))
t.start()
t = str("t"+ str(i))
threads.append(t)
i = int(i) + 1
# Warten bis alle Telnet verbindungen beendet sind
for t in threads:
t.join()
doch er gibt mri folgende fehlermeldung :
Traceback (most recent call last):
File "./Switch.py", line 63, in <module>
t.join()
TypeError: join() takes exactly one argument (0 given)
is doch aber genau das Selbe was du geschrieben hast oder ?
@D4rkie: Das ist ziemlicher Unsinn was Du da geschrieben hast und die Ausnahme passt auch nicht zum Code. Da würde man eher einen `AttributeError` erwarten weil Zeichenketten keine `join()`-Methode haben.
# Telnetverbinduung zu jedem Switch starten
for IP in switch_liste:
t = Thread(target=My_tel2switch.sw_tftpupload,args=(IP,))
t.start()
x = str("t"+ str(i))
threads.append(x)
i = int(i) + 1
# Warten bis alle Telnet verbindungen beendet sind
for t in threads:
t.join()
Was du in deiner Liste brauchst sind die erzeugten Thread-Instanzen und nicht Strings, deren Namen dem im Code verwendeten Bezeichner der Thread-Instanz ähneln.
achso ich dachte wenn ich die threads aufrufe erstellt sich automatisch ein Prozess mit der id t1, t2, t3, ......
wie gesagt habe die theorie dahinter net wirklich durchblickt
import threading
class PrimzahlThread(threading.Thread):
def __init__(self, zahl):
threading.Thread.__init__(self)
self.Zahl = zahl
def run(self):
i = 2
while i*i < self.Zahl:
if self.Zahl % i == 0:
print "%d ist nicht prim, da %d = %d * %d" % (
self.Zahl, self.Zahl, i, self.Zahl / i)
return
i += 1
print "%d ist prim" % self.Zahl
meine_threads = []
while 1:
eingabe = raw_input("> ")
if eingabe == "ende":
break
thread = PrimzahlThread(long(eingabe))
meine_threads.append(thread)
thread.start()
for t in meine_threads:
t.join()
# Telnetverbinduung zu jedem Switch starten
for IP in switch_liste:
t = Thread(target=My_tel2switch.sw_tftpupload,args=(IP,))
t.start()
threads.append(t)
# Warten bis alle Telnet verbindungen beendet sind
for t in threads:
t.join()
Was passiert wenn man einem schon beendeten Thread joinen will? Nur mal so als mögliche Fehlerquelle.
Weiß es selber nicht ich ahne nur dass das böse enden könnte...