将利用DeepSeek辅助改造30行DLX求解数独python程序 和 调用python函数的不同方法效率对比测试 的代码整合在一起
只要把代码粘贴到一个文件,比如duckudf.py,然后增加如下语句
python
duckdb.create_function("solve_single_sudoku", solve_single_sudoku) #, [VARCHAR, [[VARCHAR]], BIGINT)
s="""
select solve_single_sudoku('000080304250100090000003000040020030006090800700310009000000080602000053004002900');
"""
t=time.time();print(duckdb.sql(s));print( time.time()-t)
并修改以下函数的定义,添加参数和返回值类型
python
def solve_single_sudoku(sudoku_str: str) -> str:
并删除原有的自定义函数及全局的代码块
python
if __name__ == "__main__":
# 运行文档测试
import doctest
doctest.testmod()
# 运行主函数
main()
然后用如下命令行测试
C:\d>timer64 python duckudf.py
1
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ solve_single_sudoku('000080304250100090000003000040020030006090800700310009000000080602000053004002900') │
│ varchar │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 167589324253174698498263175941827536326495817785316249579631482612948753834752961 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────┘
0.25064992904663086
Kernel Time = 0.156 = 35%
User Time = 0.234 = 52%
Process Time = 0.390 = 87% Virtual Memory = 541 MB
Global Time = 0.445 = 100% Physical Memory = 90 MB
C:\d>timer64 python pydlx4path.txt
[[0, 0, 0, 0, 8, 0, 3, 0, 4], [2, 5, 0, 1, 0, 0, 0, 9, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 4, 0, 0, 2, 0, 0, 3, 0], [0, 0, 6, 0, 9, 0, 8, 0, 0], [7, 0, 0, 3, 1, 0, 0, 0, 9], [0, 0, 0, 0, 0, 0, 0, 8, 0], [6, 0, 2, 0, 0, 0, 0, 5, 3], [0, 0, 4, 0, 0, 2, 9, 0, 0]]
[[1, 6, 7, 5, 8, 9, 3, 2, 4], [2, 5, 3, 1, 7, 4, 6, 9, 8], [4, 9, 8, 2, 6, 3, 1, 7, 5], [9, 4, 1, 8, 2, 7, 5, 3, 6], [3, 2, 6, 4, 9, 5, 8, 1, 7], [7, 8, 5, 3, 1, 6, 2, 4, 9], [5, 7, 9, 6, 3, 1, 4, 8, 2], [6, 1, 2, 9, 4, 8, 7, 5, 3], [8, 3, 4, 7, 5, 2, 9, 6, 1]]
Kernel Time = 0.000 = 0%
User Time = 0.031 = 87%
Process Time = 0.031 = 87% Virtual Memory = 7 MB
Global Time = 0.035 = 100% Physical Memory = 12 MB
C:\d>
第一个命令行是调用duckdb执行自定义函数,第二个是直接执行python程序。可见调用duckdb执行自定义函数的用时是后者15倍,内存占用也放大了很多倍。