欢迎访问宙启技术站
智能推送

利用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模块为多线程任务添加了一个进度条,让用户可以实时看到任务的完成情况。