Ich bin neu beim Lernen Python und bekam eine Übung, um ein Multithread-Skript zu erstellen, um eine Liste von 10 öffentlichen FTP-Servern zu nehmen und mit ihnen anonym zu verbinden und nur eine Verzeichnisliste zu tun. Ich habe den folgenden Code und es funktioniert, wenn ich das ftp connect innerhalb der run-Funktion verwende, aber wenn ich versuche, eine "ftp" -Funktion zu erstellen und es verwendet, bleibt Fehler aus und dann bleibt das Terminal stecken und kann das Programm nicht beenden oder erhalten heraus, was ich nicht herausfinden kann, warum das auch immer passiert?Python Multithreading funktioniert nicht
!/usr/bin/python
import threading
import Queue
import time
from ftplib import FTP
sites = ["speedtest.tele2.net", "test.rebex.net", "test.talia.net", "ftp.swfwmd.state.fl.us", "ftp.heanet.ie", "ftp.rediris.es", "ftp.ch.freebsd.org", "ftp.mirror.nl", "ftp.ussg.iu.edu", "ftp.uni-bayreu$
class WorkerThread(threading.Thread) :
def __init__(self, queue) :
threading.Thread.__init__(self)
self.queue = queue
#def ftp(ip) :
# server = FTP(ip)
# server.login()
# server.retrlines('LIST')
def run(self) :
print "In WorkerThread"
while True :
counter = self.queue.get()
print "Connecting to FTP Server %s" % counter
#self.ftp(counter)
#print "Ordered to sleep for %d seconds!" % counter
#time.sleep(counter)
#print "Finished sleeping for %d seconds" % counter
server = FTP(counter)
server.login()
server.retrlines('LIST')
self.queue.task_done()
queue = Queue.Queue()
for i in range(10) :
print "Creating WorkerThread : %d" % i
worker = WorkerThread(queue)
worker.setDaemon(True)
worker.start()
print "WorkerThread %d Created!" % i
for j in sites :
queue.put(j)
queue.join()
print "All Tasks Over!"
Sie sollten die Ausnahme traceback setzen, um etwas mehr auf das Problem zu bekommen, auf jeden Fall auf den ersten Blick sieht es für mich Ihre _ftp_ Methode nicht die richtigen Argumente. Wie Sie geschrieben haben, erhalten Sie die Klasseninstanz, die immer als erstes Argument übergeben wird, in das IP-Argument. Ich denke, Sie sollten die Methode als 'def ftp (self, ip) 'deklarieren. – steppo
Ihr Recht, das funktioniert, wenn ich es als def ftp (selbst, ip) definiert habe, aber aus irgendeinem Grund, wenn es fertig ist, wird es nur stecken und ich kann nicht einmal ctrl-c daraus –