多线程下如何在docplex.mp中获取CPLEX的CPU Time?
解决docplex.mp多线程场景下CPU时间获取问题
默认情况下,sol.solve_details.time返回的是墙钟时间(Elapsed Time),和你用time.time()计算的结果一致,无法体现多线程下的总CPU消耗。要获取所有线程累加的CPU时间,需要从底层CPLEX对象的解详情中提取:
修改后的代码示例
from docplex.mp.model import Model import time mdl = Model() # 变量、约束、目标函数定义 mdl.context.cplex_parameters.threads = 5 mdl.parameters.timelimit.set(3600) start = time.time() sol = mdl.solve() end = time.time() # 获取多线程总CPU时间 cpu_time = mdl.solver_details.cplex_details.get_time() wall_time = sol.solve_details.time print("总CPU时间(多线程累加): ", cpu_time) print("墙钟时间(Elapsed Time): ", wall_time) print("代码层面计算的墙钟时间: ", end - start)
关键说明
mdl.solver_details.cplex_details调用底层CPLEX的解详情接口,get_time()方法返回所有线程消耗的CPU时间总和,多线程场景下该值会大于墙钟时间。- 若上述方法报错,可直接访问CPLEX核心对象获取:
cpu_time = mdl.cplex.solution.get_time(),效果完全一致。 - 原代码中
sol.solve_details.time映射的是CPLEX的墙钟时间参数,因此和代码层面计算的流逝时间一致,无法反映多线程CPU消耗。
内容的提问来源于stack exchange,提问作者Paulo Nascimento
相关产品推荐
相关产品推荐

