我正在使用tqdm显示 Python 控制台应用程序的各种进度条。对于应用程序的生产部署,我使用 Docker。
在终端中运行 Python 应用程序时,进度条工作正常。但是,当 Dockerized 并通过进度条访问终端输出时,docker logs它不起作用,因为据我了解,它不是交互式终端。虽然看起来如果docker logs在进度条完成后转储,则进度会被渲染,但不确定是否有其他条件会发生这种情况(输出缓冲?)。
我想改变我的tqdm行为,以便
这样,在生产中运行应用程序时,可以更容易地访问进度持续时间等。
将这样的自定义行为附加到的方法是什么tqdm?
我有一个使用tqdm进度条的 python 包。但是,我不希望这成为我的包用户的硬依赖。是否有一些简单的插入式解决方案可以很容易地作为后备,如果tqdm没有安装?
我正在使用 的total和leave属性tqdm.tqdm(),以及实例的update和close方法tqdm.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 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)
另外,改变print对tqdm.write行为没有任何影响.
为什么它以这种意想不到的方式表现?
编辑:这个问题是关于在tqdm循环之前或之后使用print函数的特定情况.还有其他类似的问题是关于在 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 编写分支定界算法,我正在尝试有效地显示进度。该算法使用递归,我想不出任何方法使其迭代。我想知道是否有类似 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) 我正在尝试使用 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) 我想共享一个列表来附加并行线程的输出,从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 中使用 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 秒。