So habe ich viele Dateien von einem Server herunterladen. Über 1000 ... Also dachte ich, ich würde ein Skript schreiben, das das für mich tut, das Multithread ist, so dass ich nicht ewig warten muss, bis es fertig ist. Das Problem ist, dass es eine Reihe von Fehlern ausspuckt. Ich habe nach diesem gesucht, aber konnte wirklich nichts finden, das mit dem Fehler verbunden zu sein schien, den ich habe, da ich keine Ausgabe in meinen anderen threads drucke.Python und Multithreading sys.excepthook fehlt
mein Plan war es, die Threads-Kette sich gegenseitig zu starten, so dass sie nicht zufällig eine Datei zweimal nehmen und eine andere Datei überspringen.
danke für jede Hilfe!
mylist = [list of filenames in here]
mycount = 0
def download():
global mycount
url = "http://myserver.com/content/files/" + mylist[mycount]
myfile = urllib2.urlopen(url)
with open(mylist[mycount],'wb') as output:
output.write(myfile.read())
def chain():
global mycount
if mycount <= len(mylist) - 1:
thread.start_new_thread(download,())
mycount = mycount + 1
chain()
chain()
Können Sie einen Fehler posten? Die Python-Rekursionstiefe kann 1000 sein. Setzen Sie den Thread-Generator stattdessen in eine for-Schleife. – tdelaney
BTW Ihr Code wird immer noch nicht funktionieren. Zu dem Zeitpunkt, an dem der Thread ausgeführt wird, hat der Master-Thread mycount viele Male inkrementiert. Sie sollten den zu verarbeitenden Dateinamen an den Thread übergeben. Erwägen Sie stattdessen, einen Threadpool zu verwenden. – tdelaney
@tdelaney Danke, werde zu einer for-Schleife wechseln und versuchen, auch hier ist der Fehler: http://puu.sh/qB2IW/42b809c5de.png Sie meinen als Tupelvariable Argument für die Thread-Startfunktion? Auch ich habe noch nie zuvor mit Thread-Pools gearbeitet. – Thomja