优化查看进度

This commit is contained in:
Cricial 2025-01-27 01:15:15 +08:00
parent 3a46d09b8e
commit 0f7f9c1a4b
3 changed files with 30 additions and 16 deletions

Binary file not shown.

15
main.py
View File

@ -3,10 +3,14 @@ import random
import time import time
from multiprocessing import Process from multiprocessing import Process
import argparse import argparse
from matplotlib import pyplot as plt
from computation import Computation from computation import Computation
from sqlalchemy.orm import close_all_sessions from sqlalchemy.orm import close_all_sessions
import yaml import yaml
from controller_db import ControllerDB from controller_db import ControllerDB
from 查看进度 import visualize_progress
def controll_db_and_process(exp_argument, reset_sample_argument, reset_db_argument): 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: for i in process_list:
i.join() i.join()
# 所有子进程完成后刷新最终进度
visualize_progress()
# 显示最终进度后关闭图表
plt.show()
def do_computation(c_db): def do_computation(c_db):
exp = Computation(c_db) exp = Computation(c_db)
while 1: while 1:
time.sleep(random.uniform(0, 1)) time.sleep(random.uniform(0, 2))
is_all_done = exp.run() is_all_done = exp.run()
if is_all_done: if is_all_done:
break break
@ -44,7 +55,7 @@ if __name__ == '__main__':
# 输入参数 # 输入参数
parser = argparse.ArgumentParser(description='setting') parser = argparse.ArgumentParser(description='setting')
parser.add_argument('--exp', type=str, default='without_exp') 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_sample', type=int, default='0')
parser.add_argument('--reset_db', type=bool, default=False) parser.add_argument('--reset_db', type=bool, default=False)

View File

@ -1,12 +1,14 @@
from matplotlib import rcParams, pyplot as plt from matplotlib import rcParams, pyplot as plt
from sqlalchemy import func from sqlalchemy import func
from orm import db_session, Sample from orm import db_session, Sample
# 创建全局绘图对象和轴
fig, ax = plt.subplots(figsize=(8, 5))
plt.ion() # 启用交互模式
def visualize_progress(): def visualize_progress():
""" """
可视化 `is_done_flag` 的分布 可视化 `is_done_flag` 的分布动态更新进度条
""" """
# 设置全局字体 # 设置全局字体
@ -29,21 +31,22 @@ def visualize_progress():
labels = ['未完成 (-1)', '完成(0)', '等待 (1)'] labels = ['未完成 (-1)', '完成(0)', '等待 (1)']
values = [data[-1], data[0], data[1]] values = [data[-1], data[0], data[1]]
# 清空之前的绘图内容
ax.clear()
# 创建柱状图 # 创建柱状图
plt.figure(figsize=(8, 5)) ax.bar(labels, values, color=['red', 'orange', 'green'])
plt.bar(labels, values, color=['red', 'orange', 'green']) ax.set_title('任务进度分布', fontsize=16)
plt.title('任务进度分布', fontsize=16) ax.set_xlabel('任务状态', fontsize=14)
plt.xlabel('任务状态', fontsize=14) ax.set_ylabel('数量', fontsize=14)
plt.ylabel('数量', fontsize=14) ax.tick_params(axis='both', labelsize=12)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
# 显示具体数量 # 显示具体数量
for i, v in enumerate(values): 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.pause(0.1) # 暂停一段时间以更新图表
plt.show()
visualize_progress() # 关闭窗口时,停止交互模式
plt.ioff()