Skip to main content
Glama

Mingli MCP Server

by spyfree
benchmark_iztro_comparison.py10.8 kB
""" 性能对比测试:py-iztro vs iztro-py 测试两个库的性能差异,包括: 1. 导入时间 2. 星盘生成时间 3. 运势计算时间 4. 内存使用 """ import time import tracemalloc from datetime import datetime def benchmark_import(): """对比导入时间""" print("=" * 60) print("测试 1: 导入时间对比") print("=" * 60) # 测试 py-iztro print("\n1.1 测试 py-iztro 导入...") start = time.perf_counter() try: from py_iztro import Astro as PyIztroAstro # noqa: F401 end = time.perf_counter() pyiztro_time = end - start print(f" ✓ py-iztro 导入成功: {pyiztro_time:.4f} 秒") pyiztro_available = True except ImportError as e: print(f" ✗ py-iztro 导入失败: {e}") pyiztro_available = False pyiztro_time = None # 测试 iztro-py print("\n1.2 测试 iztro-py 导入...") start = time.perf_counter() try: from iztro_py import astro as iztro_astro # noqa: F401 end = time.perf_counter() iztropy_time = end - start print(f" ✓ iztro-py 导入成功: {iztropy_time:.4f} 秒") iztropy_available = True except ImportError as e: print(f" ✗ iztro-py 导入失败: {e}") iztropy_available = False iztropy_time = None # 对比结果 if pyiztro_time and iztropy_time: speedup = pyiztro_time / iztropy_time print("\n📊 导入时间对比:") print(f" py-iztro: {pyiztro_time:.4f} 秒") print(f" iztro-py: {iztropy_time:.4f} 秒") print(f" 性能提升: {speedup:.2f}x" if speedup > 1 else f" 性能降低: {1/speedup:.2f}x") return pyiztro_available, iztropy_available def benchmark_chart_generation(iterations=100): """对比星盘生成性能""" print("\n" + "=" * 60) print(f"测试 2: 星盘生成性能 (运行 {iterations} 次)") print("=" * 60) test_data = {"date": "2000-8-16", "time_index": 2, "gender": "男"} # 测试 py-iztro try: from py_iztro import Astro as PyIztroAstro pyiztro = PyIztroAstro() print(f"\n2.1 测试 py-iztro 星盘生成 ({iterations} 次)...") tracemalloc.start() start = time.perf_counter() for _ in range(iterations): astrolabe = pyiztro.by_solar( # noqa: F841 test_data["date"], test_data["time_index"], test_data["gender"] ) end = time.perf_counter() current, peak = tracemalloc.get_traced_memory() tracemalloc.stop() pyiztro_time = end - start pyiztro_avg = pyiztro_time / iterations pyiztro_mem = peak / 1024 / 1024 # MB print(f" ✓ 总时间: {pyiztro_time:.4f} 秒") print(f" ✓ 平均时间: {pyiztro_avg:.6f} 秒/次") print(f" ✓ 峰值内存: {pyiztro_mem:.2f} MB") except Exception as e: print(f" ✗ py-iztro 测试失败: {e}") pyiztro_time = None pyiztro_avg = None pyiztro_mem = None # 测试 iztro-py try: from iztro_py import astro print(f"\n2.2 测试 iztro-py 星盘生成 ({iterations} 次)...") tracemalloc.start() start = time.perf_counter() for _ in range(iterations): _astrolabe = astro.by_solar( # noqa: F841 test_data["date"], test_data["time_index"], test_data["gender"] ) end = time.perf_counter() current, peak = tracemalloc.get_traced_memory() tracemalloc.stop() iztropy_time = end - start iztropy_avg = iztropy_time / iterations iztropy_mem = peak / 1024 / 1024 # MB print(f" ✓ 总时间: {iztropy_time:.4f} 秒") print(f" ✓ 平均时间: {iztropy_avg:.6f} 秒/次") print(f" ✓ 峰值内存: {iztropy_mem:.2f} MB") except Exception as e: print(f" ✗ iztro-py 测试失败: {e}") iztropy_time = None iztropy_avg = None iztropy_mem = None # 对比结果 if pyiztro_time and iztropy_time: speedup = pyiztro_time / iztropy_time mem_ratio = pyiztro_mem / iztropy_mem if iztropy_mem > 0 else 0 print("\n📊 星盘生成性能对比:") print(f" py-iztro: {pyiztro_avg:.6f} 秒/次, {pyiztro_mem:.2f} MB") print(f" iztro-py: {iztropy_avg:.6f} 秒/次, {iztropy_mem:.2f} MB") if speedup > 1: print(f" ⚡ iztro-py 快 {speedup:.2f}x") else: print(f" ⚠️ iztro-py 慢 {1/speedup:.2f}x") if mem_ratio > 1: print(f" 💾 iztro-py 内存少 {mem_ratio:.2f}x") else: print(f" 💾 iztro-py 内存多 {1/mem_ratio:.2f}x") def benchmark_horoscope(iterations=50): """对比运势计算性能""" print("\n" + "=" * 60) print(f"测试 3: 运势计算性能 (运行 {iterations} 次)") print("=" * 60) test_data = {"date": "2000-8-16", "time_index": 2, "gender": "男"} query_date = datetime(2024, 1, 1) # 测试 py-iztro try: from py_iztro import Astro as PyIztroAstro pyiztro = PyIztroAstro() print(f"\n3.1 测试 py-iztro 运势计算 ({iterations} 次)...") astrolabe = pyiztro.by_solar( test_data["date"], test_data["time_index"], test_data["gender"] ) tracemalloc.start() start = time.perf_counter() for _ in range(iterations): _horoscope = astrolabe.horoscope(query_date) # noqa: F841 end = time.perf_counter() current, peak = tracemalloc.get_traced_memory() tracemalloc.stop() pyiztro_time = end - start pyiztro_avg = pyiztro_time / iterations pyiztro_mem = peak / 1024 / 1024 print(f" ✓ 总时间: {pyiztro_time:.4f} 秒") print(f" ✓ 平均时间: {pyiztro_avg:.6f} 秒/次") print(f" ✓ 峰值内存: {pyiztro_mem:.2f} MB") except Exception as e: print(f" ✗ py-iztro 测试失败: {e}") pyiztro_time = None pyiztro_avg = None pyiztro_mem = None # 测试 iztro-py try: from iztro_py import astro print(f"\n3.2 测试 iztro-py 运势计算 ({iterations} 次)...") astrolabe = astro.by_solar(test_data["date"], test_data["time_index"], test_data["gender"]) tracemalloc.start() start = time.perf_counter() for _ in range(iterations): _horoscope = astrolabe.horoscope(query_date) # noqa: F841 end = time.perf_counter() current, peak = tracemalloc.get_traced_memory() tracemalloc.stop() iztropy_time = end - start iztropy_avg = iztropy_time / iterations iztropy_mem = peak / 1024 / 1024 print(f" ✓ 总时间: {iztropy_time:.4f} 秒") print(f" ✓ 平均时间: {iztropy_avg:.6f} 秒/次") print(f" ✓ 峰值内存: {iztropy_mem:.2f} MB") except Exception as e: print(f" ✗ iztro-py 测试失败: {e}") iztropy_time = None iztropy_avg = None iztropy_mem = None # 对比结果 if pyiztro_time and iztropy_time: speedup = pyiztro_time / iztropy_time mem_ratio = pyiztro_mem / iztropy_mem if iztropy_mem > 0 else 0 print("\n📊 运势计算性能对比:") print(f" py-iztro: {pyiztro_avg:.6f} 秒/次, {pyiztro_mem:.2f} MB") print(f" iztro-py: {iztropy_avg:.6f} 秒/次, {iztropy_mem:.2f} MB") if speedup > 1: print(f" ⚡ iztro-py 快 {speedup:.2f}x") else: print(f" ⚠️ iztro-py 慢 {1/speedup:.2f}x") if mem_ratio > 1: print(f" 💾 iztro-py 内存少 {mem_ratio:.2f}x") else: print(f" 💾 iztro-py 内存多 {1/mem_ratio:.2f}x") def test_api_compatibility(): """测试 API 兼容性""" print("\n" + "=" * 60) print("测试 4: API 兼容性检查") print("=" * 60) test_data = {"date": "2000-8-16", "time_index": 2, "gender": "男"} compatible = True issues = [] try: from iztro_py import astro as iztro_astro from py_iztro import Astro as PyIztroAstro # 测试 by_solar print("\n4.1 测试 by_solar() 方法...") py_astrolabe = PyIztroAstro().by_solar( test_data["date"], test_data["time_index"], test_data["gender"] ) iz_astrolabe = iztro_astro.by_solar( test_data["date"], test_data["time_index"], test_data["gender"] ) print(" ✓ 两个库都支持 by_solar()") # 测试 horoscope print("\n4.2 测试 horoscope() 方法...") query_date = datetime(2024, 1, 1) _py_horoscope = py_astrolabe.horoscope(query_date) # noqa: F841 _iz_horoscope = iz_astrolabe.horoscope(query_date) # noqa: F841 print(" ✓ 两个库都支持 horoscope()") # 检查关键属性 print("\n4.3 检查星盘对象属性...") py_attrs = dir(py_astrolabe) iz_attrs = dir(iz_astrolabe) key_methods = ["palace", "star", "horoscope"] for method in key_methods: if method in py_attrs and method in iz_attrs: print(f" ✓ 方法 {method}() 都支持") elif method in iz_attrs: print(f" ✓ 方法 {method}() 仅 iztro-py 支持") else: print(f" ⚠️ 方法 {method}() 缺失") compatible = False issues.append(f"缺失方法: {method}") print(f"\n📊 API 兼容性: {'✓ 兼容' if compatible else '⚠️ 存在差异'}") if issues: print(" 问题列表:") for issue in issues: print(f" - {issue}") except Exception as e: print(f"\n✗ API 兼容性测试失败: {e}") import traceback traceback.print_exc() def main(): """运行所有测试""" print("\n" + "🔬" * 30) print("py-iztro vs iztro-py 性能对比测试") print("🔬" * 30 + "\n") # 1. 导入时间 pyiztro_available, iztropy_available = benchmark_import() if not iztropy_available: print("\n⚠️ iztro-py 未安装,请先安装: pip install iztro-py") return if not pyiztro_available: print("\n⚠️ py-iztro 未安装,无法对比") return # 2. 星盘生成性能 benchmark_chart_generation(iterations=100) # 3. 运势计算性能 benchmark_horoscope(iterations=50) # 4. API 兼容性 test_api_compatibility() print("\n" + "=" * 60) print("测试完成!") print("=" * 60 + "\n") if __name__ == "__main__": main()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/spyfree/mingli-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server