Я создаю поточный скрипт python, в котором есть коллекция файлов, помещенных в очередь, а затем неизвестное количество потоков (по умолчанию - 3), чтобы начать загрузку. Когда каждый из потоков завершается, он обновляет stdout с статусом очереди и процентом. Все файлы загружаются, но информация о статусе неверна в третьем потоке, и я не уверен, почему. Я рассматривал возможность создания очереди с заданной работой, чтобы использовать ее для расчета, но не думаю, что мне нужно/чтобы это имело бы значение. Может ли кто-нибудь указать мне в правильном направлении?Проблема с потоком/очередью 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()
Действительно ли этот код? Где вы печатаете сообщение о состоянии? Какая версия python поддерживает 'while ... finally'? –
См. Также http://stackoverflow.com/questions/1965213/file-downloading-using-python-with-threads –