标签: tqdm

带有 Docker 日志的 tqdm 进度条

我正在使用tqdm显示 Python 控制台应用程序的各种进度条。对于应用程序的生产部署,我使用 Docker。

在终端中运行 Python 应用程序时,进度条工作正常。但是,当 Dockerized 并通过进度条访问终端输出时,docker logs它不起作用,因为据我了解,它不是交互式终端。虽然看起来如果docker logs在进度条完成后转储,则进度会被渲染,但不确定是否有其他条件会发生这种情况(输出缓冲?)。

我想改变我的tqdm行为,以便

  • 它检测何时在非交互式 Docker 化环境中运行
  • 它将定期记录完成语句(完成 10%,X 次迭代/秒),而不是显示交互式进度条

这样,在生产中运行应用程序时,可以更容易地访问进度持续时间等。

将这样的自定义行为附加到的方法是什么tqdm

python docker tqdm

4
推荐指数
1
解决办法
2008
查看次数

tqdm 不可用时的简单回退进度条

我有一个使用tqdm进度条的 python 包。但是,我不希望这成为我的包用户的硬依赖。是否有一些简单的插入式解决方案可以很容易地作为后备,如果tqdm没有安装?

我正在使用 的totalleave属性tqdm.tqdm(),以及实例的updateclose方法tqdm.tqdm

python fallback progress tqdm

3
推荐指数
1
解决办法
364
查看次数

不同python环境中的tqdm变化

我正在使用tqdm在 python 中显示进度条的包。

tqdm 还有一个用于 Jupyter 笔记本 ( tqdm_notebook())的小部件,允许一个漂亮的“网络式”进度条。

我的问题是我在code.py文件中有一个 tqdm 进度条,我将它导入到 jupyter notebook 中。

code.py从常规 python 环境(即Ipython, IDLE, shell)运行时,我希望 tqdm 以正常形式运行:

from tqdm import tqdm
a = 0
for i in tqdm(range(2000)):
   a+=i
Run Code Online (Sandbox Code Playgroud)

但是当我导入code.pyJupyter 时,我希望它使用tqdm_notebook()

from tqdm import tqdm_notebook as tqdm
a = 0
for i in tqdm(range(2000)):
   a+=i
Run Code Online (Sandbox Code Playgroud)

如何让python区分环境?

我发现这篇文章建议检查get_ipython().__class__.__name__'ipykernel' in sys.modules 但它没有区分笔记本和其他 Ipython shell(例如在 Spyder 或 IDLE …

python ipython spyder jupyter-notebook tqdm

3
推荐指数
1
解决办法
804
查看次数

Python tqdm和打印奇怪的打印输出顺序

我有以下Python 3代码:

from tqdm import tqdm

print("Before")
for _ in tqdm(range(10)): pass
print("After")
Run Code Online (Sandbox Code Playgroud)

我希望得到以下输出到终端:

Before
100%|##########| 10/10 [00:00<?, ?it/s]
After
Run Code Online (Sandbox Code Playgroud)

但是,我得到的是:

100%|##########| 10/10 [00:00<?, ?it/s]
Before
After
Run Code Online (Sandbox Code Playgroud)

即打印输出相对于我的代码以错误的顺序结束.我也试过在调用sys.flush之前和之后调用print,只是为了得到以下输出:

Before
100%|##########| 10/10 [00:00<?, ?it/s]After
Run Code Online (Sandbox Code Playgroud)

另外,改变printtqdm.write行为没有任何影响.

为什么它以这种意想不到的方式表现?

编辑:这个问题是关于在tqdm循环之前或之后使用print函数的特定情况.还有其他类似的问题是关于 tqdm循环中打印消息,而在这种情况下并非如此.

python output tqdm

3
推荐指数
1
解决办法
1049
查看次数

重置 tqdm 进度条

我想重置 tqdm 进度条。

这是我的代码:

s = tqdm(range(100))
for x in s:
    pass

# Reset it here
s.reset(0)

for x in s:
    pass
Run Code Online (Sandbox Code Playgroud)

Tqdm PB 仅适用于第一个循环。我尝试使用.reset(0)函数重置它,但它不起作用。

上面代码的输出是:

100%|??????????| 100/100 [00:00<?, ?it/s]
Run Code Online (Sandbox Code Playgroud)

我注意到他们在这里使用:Restting progress bar counter this code

pbar.n = 0
pbar.refresh()
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

python-3.x tqdm

3
推荐指数
1
解决办法
4908
查看次数

是否有类似 TQDM 的模块来创建递归进度条?

我正在用 python 编写分支定界算法,我正在尝试有效地显示进度。该算法使用递归,我想不出任何方法使其迭代。我想知道是否有类似 tqdm 的递归函数模块,或者至少有一种方法来实现带有递归函数的进度条?例如,如果我使用 tqdm 模块在 python 中编写一个迭代阶乘函数,我会这样做:

import tqdm

def factorial(n):
    end_product = 1
    for i in tqdm(range(1, n)):
        end_product *= i
    return end_product
Run Code Online (Sandbox Code Playgroud)

我将如何在这样的递归函数上实现进度条:

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

progress_bar(factorial(1000))
Run Code Online (Sandbox Code Playgroud)

python recursion progress-bar tqdm

3
推荐指数
1
解决办法
479
查看次数

如何在多线程中使用 tqdm?

我正在尝试使用 tqdm 报告从三个链接下载每个文件的进度,我想使用多线程从每个链接同时下载同时更新进度条。但是当我执行我的脚本时,有多行进度条似乎线程正在同时更新 tqdm 进度条。我在问我应该如何运行多线程来下载文件,同时保持每次下载的进度条,而不会有重复的条填充整个屏幕?这是我的代码。

import os
import sys
import requests
from pathlib import Path
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor as PE


def get_filename(url):
    filename = os.path.basename(url)
    fname, extension = os.path.splitext(filename)
    if extension:
        return filename
    header = requests.head(url).headers
    if "Location" in header:
        return os.path.basename(header["Location"])
    return fname


def get_file_size(url):
    header = requests.head(url).headers
    if "Content-Length" in header and header["Content-Length"] != 0:
        return int(header["Content-Length"])
    elif "Location" in header and "status" not in header:
        redirect_link = header["Location"]
        r = requests.head(redirect_link).headers
        return …
Run Code Online (Sandbox Code Playgroud)

python multithreading tqdm

3
推荐指数
1
解决办法
4148
查看次数

tqdm显示的“速度”是瞬时速度还是平均速度?

正如标题所说,我想知道处理栏中显示的速度tqdm是瞬时的还是平均的? 在此输入图像描述

python tqdm

3
推荐指数
1
解决办法
1516
查看次数

Python tqdm process_map:追加进程之间共享的列表?

我想共享一个列表来附加并行线程的输出,从process_mapfrom开始tqdm。(我想使用的原因process_map是很好的进度指示器和max_workers=选项。)

我尝试使用它from multiprocessing import Manager来创建共享列表,但我在这里做错了:我的代码打印一个空的shared_list,但它应该打印一个包含 20 个数字的列表,正确的顺序并不重要。

任何帮助将不胜感激,提前谢谢!

import time
from tqdm.contrib.concurrent import process_map
from multiprocessing import Manager


shared_list = []

def worker(i):
    global shared_list
    time.sleep(1)
    shared_list.append(i)

if __name__ == '__main__':
    manager = Manager()
    shared_list = manager.list()

    process_map(worker, range(20), max_workers=5)
    print(shared_list)
Run Code Online (Sandbox Code Playgroud)

python multithreading multiprocessing tqdm

3
推荐指数
1
解决办法
9153
查看次数

opencv 视频采集的 tqdm 进度条超过 100%

我正在 python 中使用 Opencv 处理视频并使用 tqdm 显示进度条。然而,进展超过了100%。不太确定为什么会发生这种情况。

我是 opencv 的新手,所以我可能会传递错误的参数来执行我的意图。

我尝试了几种方法。将它们列出来。

cam = cv2.VideoCapture("path")
fps = cam.get(cv2.CAP_PROP_FPS)
total_frame_count = int(cam.get(cv2.CAP_PROP_FRAME_COUNT))
length = total_frame_count/fps

pbar = tqdm(total = total_frame_count)
count = 0
while(True):
    ret,frame = cam.read()
    pbar.update(count)
    # process(frame)
    count += fps*5 
    cam.set(cv2.CAP_PROP_POS_FRAMES, count)
    
Run Code Online (Sandbox Code Playgroud)

我有一个叫做的计数器count,基本上是跳过视频 5 秒。

python opencv video-capture video-processing tqdm

3
推荐指数
1
解决办法
1299
查看次数