当我的脚本正在执行某些可能需要时间的任务时,如何使用进度条?
例如,一个需要一些时间才能完成并在完成后返回
True
的函数。如何在函数执行期间显示进度条?
请注意,我需要实时显示进度条,所以我不知道该怎么办。我需要
thread
为此吗?我不知道。
现在在执行函数时我没有打印任何内容,但是进度条会很好。此外,我更感兴趣的是如何从代码的角度来完成此操作。
可以使用
tqdm
库在 Python 中创建进度条。
tqdm
会自动估计剩余时间,并在简洁的单行输出中显示进度条。以下是使用
tqdm
的几种方法:
1. 使用
tqdm
循环迭代:
如果的函数正在循环中执行某些操作,则可以使用
tqdm
直接包装迭代器:
from tqdm import tqdm
import time
def my_function(n):
for i in tqdm(range(n)):
# 模拟一些工作
time.sleep(0.1)
return True
result = my_function(10) # 进度条将在函数执行时显示
print(result)
这将在循环迭代时显示一个进度条,并自动更新进度。
2. 使用
tqdm.trange
进行基于范围的迭代:
tqdm.trange
是
tqdm(range(...))
的一个简写形式,使的代码更简洁:
from tqdm import trange
import time
def my_function(n):
for i in trange(n):
# 模拟一些工作
time.sleep(0.1)
return True
result = my_function(10)
print(result)
3. 手动更新
tqdm
:
如果的函数没有循环,或者需要更精细地控制进度条的更新,可以手动更新它:
from tqdm import tqdm
import time
def my_function(n):
progress = tqdm(total=n) # 创建总迭代次数为 n 的进度条
for i in range(n):
# 模拟一些工作
time.sleep(0.1)
progress.update(1) # 每次迭代后更新进度条
progress.close() # 完成后关闭进度条
return True
result = my_function(10)
print(result)
在所有这些示例中,进度条将在函数执行时实时更新。不需要使用线程,除非的函数具有阻塞 I/O 操作,在这种情况下,使用线程可以防止 GUI 冻结。
请记住,这些只是使用
tqdm
的一些基本方法。它提供了许多其他功能,例如自定义进度条的外观、显示估计的剩余时间等等。可以查看
tqdm
文档以了解更多信息:
https://pypi.org/project/tqdm/
。