Python TQDM гонки условия с резьбой - PullRequest
0 голосов
/ 20 февраля 2020

Я заметил состояние гонки с 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]}")
...