Je crée un script python threadé qui contient une collection de fichiers placés dans une file d'attente, puis un nombre inconnu de threads (la valeur par défaut est 3) pour lancer le téléchargement. Lorsque chaque thread est terminé, il met à jour stdout avec l'état de la file d'attente et un pourcentage. Tous les fichiers sont en cours de téléchargement mais les informations d'état sont erronées sur le 3ème fil et je ne sais pas pourquoi. J'ai envisagé de créer une file d'attente de travail à utiliser pour le calcul, mais je ne pense pas que je devrais/que cela aurait de l'importance. Quelqu'un pourrait-il me diriger dans la bonne direction ici?Problème de thread/file d'attente Python
download_queue = queue.Queue()
class Downloader(threading.Thread):
def __init__(self,work_queue):
super().__init__()
self.current_job = 0
self.work_queue = work_queue
self.queue_size = work_queue.qsize()
def run(self):
while self.work_queue.qsize() > 0:
url = self.work_queue.get(True)
system_call = "wget -nc -q {0} -O {1}".format(url,local_file)
os.system(system_call)
self.current_job = int(self.queue_size) - int(self.work_queue.qsize())
self.percent = (self.current_job/self.queue_size) * 100
sys.stdout.flush()
status = "\rDownloading " + url.split('/')[-1] + " [status: " + str(self.current_job) + "/" + str(self.queue_size) + ", " + str(round(self.percent,2)) + "%]"
finally:
self.work_queue.task_done()
def main:
if download_queue.qsize() > 0:
if options.active_downloads:
active_downloads = options.active_downloads
else:
active_downloads = 3
for x in range(active_downloads):
downloader = Downloader(download_queue)
downloader.start()
download_queue.join()
Ce code est-il réel? Où imprimez-vous le message d'état? Quelle version de python supporte 'while ... finally'? –
Voir aussi http://stackoverflow.com/questions/1965213/file-downloading-using-python-with-threads –