我正在使用tqdmPython在我们的脚本中显示控制台进度条.但是,我必须将调用print消息的函数调用到控制台,而且我无法更改.通常,在控制台中显示进度条的同时写入控制台会使显示屏变得如此:
from time import sleep
from tqdm import tqdm
def blabla():
print "Foo blabla"
for k in tqdm(range(3)):
blabla()
sleep(.5)
Run Code Online (Sandbox Code Playgroud)
这会创建输出:
0%| | 0/3 [00:00<?, ?it/s]Foo
blabla
33%|###########6 | 1/3 [00:00<00:01, 2.00it/s]Foo
blabla
67%|#######################3 | 2/3 [00:01<00:00, 2.00it/s]Foo
blabla
100%|###################################| 3/3 [00:01<00:00, 2.00it/s]
Run Code Online (Sandbox Code Playgroud)
根据tqdm该方法的文档tqdm.write()提供了一种在不破坏显示的进度条的情况下将消息写入控制台的方法.因此,此片段提供了正确的输出:
from time import sleep
from tqdm import tqdm
def blabla():
tqdm.write("Foo blabla")
for k in tqdm(range(3)):
blabla()
sleep(.5)
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
Foo blabla
Foo blabla
Foo blabla
100%|###################################| 3/3 …Run Code Online (Sandbox Code Playgroud) 我正在尝试集成一个tqdm进度条来监视aiohttp在Python 3.5中生成的POST请求.我有一个工作进度条,但似乎无法使用收集结果as_completed().指针感激不尽.
我发现的示例建议使用以下模式,该模式与Python 3.5 async def定义不兼容:
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(coros)):
yield from f
Run Code Online (Sandbox Code Playgroud)
在没有进度条的情况下工作(虽然部分编辑)异步代码:
def async_classify(records):
async def fetch(session, name, sequence):
url = 'https://app.example.com/api/v0/search'
payload = {'sequence': str(sequence)}
async with session.post(url, data=payload) as response:
return name, await response.json()
async def loop():
auth = aiohttp.BasicAuth(api_key)
conn = aiohttp.TCPConnector(limit=100)
with aiohttp.ClientSession(auth=auth, connector=conn) as session:
tasks = [fetch(session, record.id, record.seq) for record in records]
responses = await asyncio.gather(*tasks)
return OrderedDict(responses)
Run Code Online (Sandbox Code Playgroud)
这是我修改的失败尝试loop():
async def …Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题:如何将内置的Python记录器的print功能更改为tqdm.write使得记录消息不会干扰tqdm的进度条?谢谢!
我经常看到,tqdm进度条被其他打印件打破,例如:
93%|??????????| 28/30 [00:02<00:00, 13.44it/s]Subject S9
100%|??????????| 30/30 [00:02<00:00, 12.94it/s]
93%|??????????| 28/30 [00:02<00:00, 11.49it/s]Pickling...
100%|??????????| 30/30 [00:02<00:00, 11.47it/s]
Run Code Online (Sandbox Code Playgroud)
这里应该只显示 2 个进度条。尽管如此成功,打印一些文本会以很高的百分比中断进度条,其余的会在之后打印出来。
是否可以以某种方式“刷新”进度条?
我读过,默认情况下会tqdm打印stderr并尝试刷新它
sys.stderr.flush()
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。
以上都是在PyCharm控制台模拟中发生的,所以可以与此相关。
我正在使用tqdm的进度条,我想通过使用一个参数来缩短进度条本身,以指示进度条应该有多少个进度条
所以而不是这个
Training (16): 100%|?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????| 983/984 [00:04<00:00, 242.42it/s, loss=0.0598]
Run Code Online (Sandbox Code Playgroud)
我会得到这样的东西
Training (16): 100%|?????????????| 983/984 [00:04<00:00, 242.42it/s, loss=0.0598]
Run Code Online (Sandbox Code Playgroud)
我已经探索了的构造bar_format函数中的参数tqdm,但无法弄清楚如何更改它的大小。
我正在编写一个程序,其中的操作需要几秒钟(加载大文件)。幸运的是,它总是需要相同的时间。所以,为了用户的利益,我想做一个进度条。然而,tqdm似乎是为循环设计的。可以说这sleep(10)是一个需要时间的过程。我该如何解决这个问题?
我想为一个不是循环的长过程制作一个进度条。
from time import time, sleep
from tqdm import tqdm
for i in tqdm([1]):
sleep(10)
Run Code Online (Sandbox Code Playgroud)
这段代码的问题是进度条将保持为零,然后在进程结束时跳到 100%。我想要一个在 10 秒内持续变化的进度条。
我想在 jupyter 笔记本中看到 apply 函数的进度条。
在 Ubuntu 上一切正常,在 Windows 10 上我收到错误。
代码:
from tqdm.notebook import tqdm
tqdm.pandas()
preprocessed_text_test = df.text_col.progress_apply(
lambda x: [
x
]
)
Run Code Online (Sandbox Code Playgroud)
错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_23140/2942098042.py in <module>
3 tqdm.pandas()
4
----> 5 preprocessed_text_test = df.text_col.progress_apply(
6 lambda x: [
7 x
~\Anaconda3\envs\dev\lib\site-packages\tqdm\std.py in inner(df, func, *args, **kwargs)
779
780 try:
--> 781 func = df._is_builtin_func(func)
782 except TypeError:
783 pass
~\Anaconda3\envs\dev\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
5476 ):
5477 return self[name]
-> …Run Code Online (Sandbox Code Playgroud) 喜欢tqdm进度条,但是当我在jenkins上使用它时,我会在stdout(特别是无所不在[A)中得到一堆奇怪的文物和太多的臃肿.在tqdm中是否有秘密模式使其与jenkins很好地协同工作?用于无缝检测jenkins等非交互式shell的奖励积分.这是我的典型输出:
label: 0it [00:00, ?it/s][A
[A
16%|#6 | 5378/33302 [36:28<2:30:49, 3.09it/s]
[A
16%|#6 | 5379/33302 [36:29<2:36:46, 2.97it/s]
[A
...
Run Code Online (Sandbox Code Playgroud) 答案请参见:
\n首先,我知道很多问题都与这个问题类似。\n但是在花了这么多时间之后,我现在向社区寻求帮助。
\n我开发并使用了一堆依赖于 的 python 模块tqdm。\n我希望它们可以在 Jupyter、控制台或 GUI 中使用。\n在 Jupyter 或控制台中一切正常:日志记录/打印和 tqdm 进度之间没有冲突酒吧。以下是显示控制台/Jupyter 行为的示例代码:
# coding=utf-8\nfrom tqdm.auto import tqdm\nimport time\nimport logging\nimport sys\nimport datetime\n__is_setup_done = False\n\n\ndef setup_logging(log_prefix):\n global __is_setup_done\n\n if __is_setup_done:\n pass\n else:\n __log_file_name = "{}-{}_log_file.txt".format(log_prefix,\n datetime.datetime.utcnow().isoformat().replace(":", "-"))\n\n __log_format = \'%(asctime)s - %(name)-30s - %(levelname)s - %(message)s\'\n __console_date_format = \'%Y-%m-%d %H:%M:%S\'\n __file_date_format = \'%Y-%m-%d %H-%M-%S\'\n\n root …Run Code Online (Sandbox Code Playgroud) 我在 Pytorch Lightning 中的 tqdm 进度条有很多问题:
INFO:root: Name Type Params
0 l1 Linear 7 K
Epoch 2: 56%|????????????? | 2093/3750 [00:05<00:03, 525.47batch/s, batch_nb=1874, loss=0.714, training_loss=0.4, v_nb=51]
Run Code Online (Sandbox Code Playgroud)
INFO:root: Name Type Params
0 l1 Linear 7 K
Epoch 1: 50%|????? | 1875/3750 [00:05<00:05, 322.34batch/s, batch_nb=1874, loss=1.534, training_loss=1.72, v_nb=49]
Epoch 1: 50%|????? | 1879/3750 [00:05<00:05, 319.41batch/s, batch_nb=1874, loss=1.534, training_loss=1.72, v_nb=49]
Epoch 1: 52%|?????? | 1942/3750 [00:05<00:04, 374.05batch/s, batch_nb=1874, loss=1.534, training_loss=1.72, v_nb=49]
Epoch 1: 53%|?????? | 2005/3750 [00:05<00:04, 425.01batch/s, …Run Code Online (Sandbox Code Playgroud) tqdm ×10
python ×7
logging ×2
aiohttp ×1
flush ×1
jenkins ×1
progress-bar ×1
pycharm ×1
pyqt ×1
python-2.7 ×1
python-3.5 ×1
pytorch ×1
stdout ×1