You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多线程下如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:36:06