Я заметил состояние гонки с tqdm в многопоточном l oop, я не могу понять, почему.
tqdm составляет 4.42.1, python 3.8.1
Здесь пример кода, который отлично работает с индикатором выполнения, но быстро зависает с ним.
MAX_THREADS инициализируется значением 10.
Ressource - это класс данных, ничего особенного .
Приблизительно через некоторое время (менее 5 минут) с tqdm все зависает.
def download_unit(self, res: Ressource) -> str:
(...)
rep = make_get_requests(res.link, stream=True)
with open(filepath, "wb") as f:
pbar1 = tqdm(total=int(res.size / 2048), position=1)
for chunk in rep.iter_content(chunk_size=2048):
if chunk:
pbar1.set_description("{}".format(filename))
pbar1.update()
f.write(chunk)
(...)
def download_ressources(self, global_ressources_list: Set[Ressource]):
with ThreadPoolExecutor(max_workers=self.MAX_THREADS) as executor:
future = {executor.submit(self.download_unit, r): r for r in global_ressources_list}
for f in as_completed(future):
logger.debug(f"{f.result()} : {future[f]}")