mirror of
https://github.com/TriM-Organization/Musicreater.git
synced 2025-09-05 20:06:23 +00:00
2.3.0,基于FSQ的完整流式音符信息传输支持。
This commit is contained in:
259
resources/test/enfasted_list_merging_test.py
Normal file
259
resources/test/enfasted_list_merging_test.py
Normal file
@ -0,0 +1,259 @@
|
||||
import time
|
||||
from itertools import chain
|
||||
import random
|
||||
from rich.console import Console
|
||||
from rich.progress import Progress
|
||||
from rich.table import Table
|
||||
from multiprocessing import freeze_support, Pool, Process
|
||||
|
||||
console = Console()
|
||||
|
||||
# gening_stst = {"NOWIDX": 0, "DATA": {}}
|
||||
|
||||
|
||||
# 生成单个字典的函数(用于多进程)
|
||||
def generate_single_dict(args):
|
||||
dict_id, dict_size = args
|
||||
# if dict_id:
|
||||
# console.print(
|
||||
# f"字典 {dict_id + 1} 大小 {dict_size} 生成中...",
|
||||
# )
|
||||
# else:
|
||||
# console.print(
|
||||
# f"\n字典 {dict_id + 1} 大小 {dict_size} 生成中...",
|
||||
# )
|
||||
# final_d = {}
|
||||
# gening_stst["DATA"][dict_id] = 0
|
||||
# for i in range(dict_size):
|
||||
# final_d[i] = [random.randint(0, 1000) for _ in range(random.randint(10000, 99999))]
|
||||
# gening_stst["DATA"][dict_id] += 1
|
||||
return dict_id, {
|
||||
i: [random.randint(0, 1000) for _ in range(random.randint(10000, 90000))]
|
||||
for i in range(dict_size)
|
||||
}
|
||||
# return dict_id, final_d
|
||||
|
||||
|
||||
# 合并函数定义
|
||||
def chain_merging(dict_info: dict):
|
||||
return sorted(chain(*dict_info.values()))
|
||||
|
||||
|
||||
def seq_merging(dict_info: dict):
|
||||
return sorted([i for sub in dict_info.values() for i in sub])
|
||||
|
||||
|
||||
def summing(*_):
|
||||
k = []
|
||||
for i in _:
|
||||
k += i
|
||||
return k
|
||||
|
||||
|
||||
def plus_merging(dict_info: dict):
|
||||
return sorted(summing(*dict_info.values()))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
freeze_support() # Windows系统需要这个调用
|
||||
|
||||
# 测试配置
|
||||
dict_size = 50 # 每个字典的键值对数量
|
||||
num_tests = 50 # 测试次数
|
||||
|
||||
function_list = [chain_merging, seq_merging, plus_merging]
|
||||
# dict_list = []
|
||||
results = {func.__name__: [] for func in function_list}
|
||||
|
||||
# 多进程生成多个字典
|
||||
with Progress() as progress:
|
||||
task = progress.add_task("[green]进行速度测试...", total=num_tests)
|
||||
# gen_task = progress.add_task("[cyan] - 生成测试数据...", total=num_tests)
|
||||
with Pool() as pool:
|
||||
args_list = [
|
||||
(
|
||||
i,
|
||||
dict_size,
|
||||
)
|
||||
for i in range(num_tests)
|
||||
]
|
||||
|
||||
# def disp_work():
|
||||
# while gening_stst["NOWIDX"] < num_tests:
|
||||
# progress.update(
|
||||
# gen_task,
|
||||
# advance=1,
|
||||
# description=f"[cyan]正在生成 {gening_stst['DATA']['NOWIDX']}/{dict_size -1}",
|
||||
# # description="正在生成..."+console._render_buffer(
|
||||
# # console.render(table,),
|
||||
# # ),
|
||||
# )
|
||||
|
||||
# Process(target=disp_work).start()
|
||||
|
||||
for result in pool.imap_unordered(generate_single_dict, args_list):
|
||||
# dict_list.append(result)
|
||||
progress.update(
|
||||
task,
|
||||
advance=1,
|
||||
description=f"[cyan]正在测试 {result[0] + 1}/{num_tests}",
|
||||
# description="正在生成..."+console._render_buffer(
|
||||
# console.render(table,),
|
||||
# ),
|
||||
# refresh=True,
|
||||
)
|
||||
|
||||
# gening_stst["NOWIDX"] += 1
|
||||
|
||||
# for _ in range(num_tests):
|
||||
# 随机选择字典和打乱函数顺序
|
||||
# current_dict = generate_single_dict((_, dict_size))
|
||||
# progress.update(
|
||||
# test_task,
|
||||
# advance=1,
|
||||
# # description=f"[cyan]正在测试 {_}/{num_tests -1}",
|
||||
# # description="正在测试..."+console._render_buffer(
|
||||
# # console.render(table,progress.console.options),
|
||||
# # ),
|
||||
# # refresh=True,
|
||||
# )
|
||||
|
||||
# rangen_task = progress.add_task(
|
||||
# "[green]正在生成测试数据...",
|
||||
# total=dict_size,
|
||||
# )
|
||||
# current_dict = {}
|
||||
# desc = "正在生成序列 {}/{}".format("{}",dict_size-1)
|
||||
|
||||
# for i in range(dict_size):
|
||||
# # print("正在生成第", i, "个序列",end="\r",flush=True)
|
||||
# progress.update(rangen_task, advance=1, description=desc.format(i))
|
||||
# current_dict[i] = [random.randint(0, 1000) for _ in range(random.randint(10000, 99999))]
|
||||
|
||||
shuffled_funcs = random.sample(function_list, len(function_list))
|
||||
# table.rows
|
||||
# table.columns = fine_column
|
||||
# progress.live
|
||||
# progress.console._buffer.extend(progress.console.render(table))
|
||||
# for j in progress.console.render(table,progress.console.options):
|
||||
# progress.console._buffer.insert(0,j)
|
||||
|
||||
for i, func in enumerate(shuffled_funcs):
|
||||
|
||||
start = time.perf_counter()
|
||||
func(result[1])
|
||||
elapsed = time.perf_counter() - start
|
||||
results[func.__name__].append(elapsed)
|
||||
# gening_stst["NOWIDX"] = num_tests
|
||||
|
||||
# fine_column = table.columns.copy()
|
||||
|
||||
# for func in function_list:
|
||||
# name = func.__name__
|
||||
|
||||
# table.add_row(
|
||||
# name,
|
||||
# f"-",
|
||||
# f"-",
|
||||
# f"-",
|
||||
# f"-",
|
||||
# )
|
||||
|
||||
# # proc_pool = []
|
||||
|
||||
# 测试执行部分(保持顺序执行)
|
||||
# with Progress() as progress:
|
||||
# # progress.live.update(table, refresh=True)
|
||||
# # progress.live.process_renderables([table],)
|
||||
# # print([console._render_buffer(
|
||||
# # console.render(table,),
|
||||
# # )])
|
||||
# # progress.console._buffer.extend(progress.console.render(table))
|
||||
# test_task = progress.add_task("[cyan]进行速度测试...", total=num_tests)
|
||||
|
||||
# for _ in range(num_tests):
|
||||
# # 随机选择字典和打乱函数顺序
|
||||
# # current_dict = generate_single_dict((_, dict_size))
|
||||
# progress.update(
|
||||
# test_task,
|
||||
# advance=1,
|
||||
# description=f"[cyan]正在测试 {_}/{num_tests -1}",
|
||||
# # description="正在测试..."+console._render_buffer(
|
||||
# # console.render(table,progress.console.options),
|
||||
# # ),
|
||||
# # refresh=True,
|
||||
# )
|
||||
|
||||
# rangen_task = progress.add_task(
|
||||
# "[green]正在生成测试数据...",
|
||||
# total=dict_size,
|
||||
# )
|
||||
# current_dict = {}
|
||||
# desc = "正在生成序列 {}/{}".format("{}",dict_size-1)
|
||||
|
||||
# for i in range(dict_size):
|
||||
# # print("正在生成第", i, "个序列",end="\r",flush=True)
|
||||
# progress.update(rangen_task, advance=1, description=desc.format(i))
|
||||
# current_dict[i] = [random.randint(0, 1000) for _ in range(random.randint(10000, 99999))]
|
||||
|
||||
# shuffled_funcs = random.sample(function_list, len(function_list))
|
||||
# # table.rows
|
||||
# # table.columns = fine_column
|
||||
# # progress.live
|
||||
# # progress.console._buffer.extend(progress.console.render(table))
|
||||
# # for j in progress.console.render(table,progress.console.options):
|
||||
# # progress.console._buffer.insert(0,j)
|
||||
|
||||
# for i, func in enumerate(shuffled_funcs):
|
||||
|
||||
# start = time.perf_counter()
|
||||
# func(current_dict)
|
||||
# elapsed = time.perf_counter() - start
|
||||
# results[func.__name__].append(elapsed)
|
||||
|
||||
# times = results[func.__name__]
|
||||
# avg_time = sum(times) / len(times)
|
||||
# min_time = min(times)
|
||||
# max_time = max(times)
|
||||
|
||||
# table.columns[0]
|
||||
|
||||
# table.columns[0]._cells[i] = func.__name__
|
||||
# table.columns[1]._cells[i] = f"{avg_time:.5f}"
|
||||
# table.columns[2]._cells[i] = f"{min_time:.5f}"
|
||||
# table.columns[3]._cells[i] = f"{max_time:.5f}"
|
||||
# table.columns[4]._cells[i] = str(len(times))
|
||||
|
||||
# progress.update(test_task, advance=0.5)
|
||||
|
||||
# 结果展示部分
|
||||
|
||||
# 结果表格
|
||||
table = Table(title="\n[cyan]性能测试结果", show_header=True, header_style="bold")
|
||||
table.add_column("函数名称", style="dim", width=15)
|
||||
table.add_column("平均耗时 (秒)", justify="right")
|
||||
table.add_column("最小耗时 (秒)", justify="right")
|
||||
table.add_column("最大耗时 (秒)", justify="right")
|
||||
table.add_column("测试次数", justify="right")
|
||||
|
||||
for i, func in enumerate(function_list):
|
||||
name = func.__name__
|
||||
times = results[name]
|
||||
avg_time = sum(times) / len(times)
|
||||
min_time = min(times)
|
||||
max_time = max(times)
|
||||
|
||||
table.add_row(
|
||||
name,
|
||||
f"{avg_time:.5f}",
|
||||
f"{min_time:.5f}",
|
||||
f"{max_time:.5f}",
|
||||
str(len(times)),
|
||||
)
|
||||
# table.columns[0]._cells[i] = name
|
||||
# table.columns[1]._cells[i] = f"{avg_time:.5f}"
|
||||
# table.columns[2]._cells[i] = f"{min_time:.5f}"
|
||||
# table.columns[3]._cells[i] = f"{max_time:.5f}"
|
||||
# table.columns[4]._cells[i] = str(len(times))
|
||||
|
||||
console.print(table)
|
39
resources/test/list_merging_text.py
Normal file
39
resources/test/list_merging_text.py
Normal file
@ -0,0 +1,39 @@
|
||||
import time
|
||||
from itertools import chain
|
||||
import random
|
||||
|
||||
print("生成序列中")
|
||||
|
||||
fine_dict = {}
|
||||
|
||||
for i in range(50):
|
||||
print("正在生成第", i, "个序列",end="\r",flush=True)
|
||||
fine_dict[i] = [random.randint(0, 1000) for _ in range(random.randint(10000, 99999))]
|
||||
|
||||
print("序列生成完成")
|
||||
|
||||
def chain_merging(dict_info: dict):
|
||||
return sorted(chain(*dict_info.values()))
|
||||
|
||||
def seq_merging(dict_info: dict):
|
||||
return sorted([i for sub in dict_info.values() for i in sub])
|
||||
|
||||
def summing(*_):
|
||||
k = []
|
||||
for i in _:
|
||||
k += i
|
||||
return k
|
||||
|
||||
def plus_merging(dict_info: dict):
|
||||
return sorted(summing(*dict_info.values()))
|
||||
|
||||
function_list = [chain_merging, seq_merging, plus_merging]
|
||||
|
||||
|
||||
for func in function_list:
|
||||
print("正在使用",func.__name__,"函数",)
|
||||
start = time.time()
|
||||
func(fine_dict)
|
||||
print("耗时",time.time() - start)
|
||||
|
||||
print("结束")
|
Reference in New Issue
Block a user