利用Python的clint.textui.progress模块为多线程任务添加进度条
发布时间:2024-01-03 01:04:09
Python的clint.textui.progress模块可以用于为多线程任务添加进度条,给用户实时展示任务的完成情况。下面是一个使用例子:
import threading
import time
import random
from clint.textui import progress
# 定义一个任务类,用于模拟耗时任务
class TaskThread(threading.Thread):
def __init__(self, id):
threading.Thread.__init__(self)
self.id = id
self.progress = 0
def run(self):
# 模拟任务的进度更新
while self.progress < 100:
self.progress += random.randint(1, 5)
time.sleep(1)
def get_progress(self):
return self.progress
# 定义任务列表
tasks = [TaskThread(i) for i in range(10)]
# 启动任务线程
for task in tasks:
task.start()
# 创建进度条
with progress.Bar(expected_size=len(tasks)) as bar:
# 监听任务进度
while True:
completed_tasks = 0
for task in tasks:
if task.get_progress() >= 100:
completed_tasks += 1
# 更新进度条
bar.show(completed_tasks)
# 所有任务完成时退出循环
if completed_tasks == len(tasks):
break
# 输出任务完成信息
print("All tasks completed.")
在上面的代码中,我们定义了一个TaskThread类,模拟了一个耗时任务。每个任务都有一个进度值,用于表示任务的完成情况。在任务的run方法中,我们通过模拟每次任务进度的随机增加,来模拟任务的进度更新。
然后,我们创建了一个任务列表,并启动了每个任务的线程。接下来,我们通过调用clint.textui.progress模块的Bar类,创建了一个进度条。在进度条外面的while循环中,我们使用任务列表中每个任务的get_progress方法来获取任务的进度,并根据已完成的任务数量来更新进度条。
最后,当所有任务完成时,我们会输出"All tasks completed."的信息。
这样,我们就利用Python的clint.textui.progress模块为多线程任务添加了一个进度条,让用户可以实时看到任务的完成情况。
