#python #python-3.x #for-loop #python-requests #tqdm
#python #python-3.x #for-цикл #python-запросы #tqdm
Вопрос:
Короткая версия: я рассматриваю, как реализовать индикатор выполнения в программе Python3 в виде вывода на печать или std, поскольку моя программа запускает 12 тыс. запросов HEAD с библиотекой запросов python в списке доменов. Я хочу знать, как далеко это продвинулось.
Подробные сведения
У меня есть скрипт для получения текстового файла, из sys.argv
которого есть список доменных имен, затем с помощью запросов python можно получить статус заголовка каждого из них, при этом очередь и поток выполняются довольно быстро. Но если у вас есть 12 000 доменов для запроса, это может занять некоторое время.
Я хочу добавить статус всего файла в качестве индикатора выполнения. Я добился некоторого успеха, используя приведенное ниже из другого сообщения здесь, в stack.
for line in (url):
global progress
progress = progress len(line)
progress_percent = (1.0*progress)/fileSize
print("Progress :", progress_percent)
Но у меня есть этот фрагмент кода внутри моей функции, который также ставит в очередь каждый URL-адрес для потока и очереди, поэтому я все равно получаю новую строку для каждой строки, и это больше, чем просто индикатор выполнения, который достигает 100%.
Я пробовал использовать tqdm, но я не могу заставить его выполнять правильные вычисления, либо он вообще не выводит выходные данные (?), Либо он присваивает статус каждому URL-адресу в процентах от общего числа.
Псевдокод остальной части моей программы:
sys.argv[1] # get the file
work_function() # a while true loop that gets a URL from a queue, inside this is the `for line in URL` function
main() # makes all the head requests, gets response strings writes to different text files.
for i in range(x): # small threading loop for the `work_function`.
for loop # that makes the queue of URLs from the sys.argv file in.
Мои лучшие усилия до сих пор были такими, любые предложения по улучшению приветствуются!
Прогресс: 0,71111111111111111
Прогресс: 0,73333333333333333
Прогресс: 0,7555555555555555
Комментарии:
1. В чем конкретная проблема? Чтобы вычислить прогресс, печатать его реже, показывать его обновление в одной строке вместо одной для каждой печати, что-то еще?
2. Чтобы поместить индикатор выполнения для того, сколько запросов было сделано из общего числа из данного файла в одной строке, да.
3. Попробуйте
print("Progress :", progress_percent, end="r")
. Затем следующая печать начнется с той же строки, что и эта. Имейте в виду, что если в следующей печати меньше символов, символы из предыдущей печати остаются на экране.4. Это значительное улучшение по сравнению с инструкцией print, которая у меня была, намного чище.