Python progress bar в GET-запросах

Рейтинг: 0Ответов: 1Опубликовано: 13.03.2023

Мне нужно одновременно отправить 1000 GET-запросов с помощью multiprocessing и через библиотеку tqdm отслеживать уже отправленные запросы

Проблема состоит в том, что я работаю со списком и при использовании tqdm я совершаю лишние действия. Как правильно написать progres bar?

Когда использую tqdm в функции get, на консоль не выводится progress bar

Для проверки использую https://en.wikipedia.org/wiki/

Вот полный код:

from tqdm import tqdm
import multiprocessing as mp
import requests
     
def get(url):
    response = requests.get(url)
    return response



if __name__ == '__main__':
    adress = input('Введите адрес: ')
    urls = [f'{adress}{i}' for i in range(1000)]
    with mp.Pool(mp.cpu_count()) as pool:
      res = pool.map(get, urls)

Ответы

▲ 2Принят

Вот вам пример кода, как можно сделать, для примера я использовал сайт, который выдаёт результаты с заданной задержкой. И ещё я использовал imap вместо map, в этом случае результаты приходят суммарно быстрее, но не обязательно в том порядке, в котором были запрошены.

from tqdm import tqdm
import multiprocessing as mp
import requests
     
def get(url):
    response = requests.get(url)
    return response.json()['url']

if __name__ == '__main__':
    adress = 'http://httpbin.org/delay/'
    urls = [f'{adress}{i}' for i in range(1,11)]
    results = []
    with mp.Pool(mp.cpu_count()) as pool:
        for res in tqdm(pool.imap(get, urls), total=len(urls)):
            results.append(res)
    print(results)