diff --git a/__pycache__/查看进度.cpython-38.pyc b/__pycache__/查看进度.cpython-38.pyc new file mode 100644 index 0000000..7de7e92 Binary files /dev/null and b/__pycache__/查看进度.cpython-38.pyc differ diff --git a/main.py b/main.py index 93d7407..fb74878 100644 --- a/main.py +++ b/main.py @@ -3,10 +3,14 @@ import random import time from multiprocessing import Process import argparse + +from matplotlib import pyplot as plt + from computation import Computation from sqlalchemy.orm import close_all_sessions import yaml from controller_db import ControllerDB +from 查看进度 import visualize_progress def controll_db_and_process(exp_argument, reset_sample_argument, reset_db_argument): @@ -30,11 +34,18 @@ def do_process(target: object, controller_db: ControllerDB, ): for i in process_list: i.join() + + # 所有子进程完成后刷新最终进度 + visualize_progress() + + # 显示最终进度后关闭图表 + plt.show() + def do_computation(c_db): exp = Computation(c_db) while 1: - time.sleep(random.uniform(0, 1)) + time.sleep(random.uniform(0, 2)) is_all_done = exp.run() if is_all_done: break @@ -44,7 +55,7 @@ if __name__ == '__main__': # 输入参数 parser = argparse.ArgumentParser(description='setting') parser.add_argument('--exp', type=str, default='without_exp') - parser.add_argument('--job', type=int, default='1') + parser.add_argument('--job', type=int, default='4') parser.add_argument('--reset_sample', type=int, default='0') parser.add_argument('--reset_db', type=bool, default=False) diff --git a/查看进度.py b/查看进度.py index 8a15e75..72b67f1 100644 --- a/查看进度.py +++ b/查看进度.py @@ -1,12 +1,14 @@ from matplotlib import rcParams, pyplot as plt from sqlalchemy import func - from orm import db_session, Sample +# 创建全局绘图对象和轴 +fig, ax = plt.subplots(figsize=(8, 5)) +plt.ion() # 启用交互模式 def visualize_progress(): """ - 可视化 `is_done_flag` 的分布。 + 可视化 `is_done_flag` 的分布,动态更新进度条。 """ # 设置全局字体 @@ -29,21 +31,22 @@ def visualize_progress(): labels = ['未完成 (-1)', '完成(0)', '等待 (1)'] values = [data[-1], data[0], data[1]] + # 清空之前的绘图内容 + ax.clear() + # 创建柱状图 - plt.figure(figsize=(8, 5)) - plt.bar(labels, values, color=['red', 'orange', 'green']) - plt.title('任务进度分布', fontsize=16) - plt.xlabel('任务状态', fontsize=14) - plt.ylabel('数量', fontsize=14) - plt.xticks(fontsize=12) - plt.yticks(fontsize=12) + ax.bar(labels, values, color=['red', 'orange', 'green']) + ax.set_title('任务进度分布', fontsize=16) + ax.set_xlabel('任务状态', fontsize=14) + ax.set_ylabel('数量', fontsize=14) + ax.tick_params(axis='both', labelsize=12) # 显示具体数量 for i, v in enumerate(values): - plt.text(i, v + 0.5, str(v), ha='center', fontsize=12) + ax.text(i, v + 0.5, str(v), ha='center', fontsize=12) - # 显示图表 - plt.tight_layout() - plt.show() + # 刷新绘图 + plt.pause(0.1) # 暂停一段时间以更新图表 -visualize_progress() \ No newline at end of file +# 关闭窗口时,停止交互模式 +plt.ioff()