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

如何在simpy.Environment.run()中使用tqdm预估仿真耗时?

用tqdm预估SimPy仿真运行时长的实现方案

你原有写法不生效的核心原因是:env.run(until=xxx)是阻塞执行的方法,会直接运行到指定的仿真结束时间才返回结果,且返回值并非可迭代对象,tqdm无法从中捕获进度变化,这个需求是可以实现的。


实现思路

  • 将总仿真时长拆分为N个固定步长的小阶段
  • 每次调用env.run()仅执行一个步长的仿真逻辑
  • 每跑完一个步长手动更新tqdm进度条
  • 循环执行直到达到总仿真时长

可用代码示例

from tqdm.auto import tqdm
import simpy

# 初始化仿真环境
env = simpy.Environment()

# 此处替换为你自己的仿真进程逻辑即可
def your_business_process(env):
    while True:
        # 你的业务仿真逻辑
        yield env.timeout(1)

env.process(your_business_process(env))

# 配置参数
total_sim_time = 100  # 总仿真时长
update_step = 1  # 进度条更新步长,步长越小进度条越顺滑,可按需调整

# 运行仿真并显示进度条
with tqdm(total=total_sim_time) as pbar:
    current_sim_time = 0
    while current_sim_time < total_sim_time:
        # 避免最后一次执行超过总仿真时长
        run_length = min(update_step, total_sim_time - current_sim_time)
        env.run(until=current_sim_time + run_length)
        # 更新进度条
        pbar.update(run_length)
        current_sim_time = env.now

注意事项

  • 该方案对原有业务代码侵入性极低,仅需要调整仿真启动的逻辑即可
  • 若总仿真时长非常大(比如超过10^6),可以调大update_step参数,减少进度条更新带来的性能损耗
  • 如果你的仿真逻辑中存在大量小于步长的离散事件,也可以通过监听仿真事件流更新进度,步长拆分写法的通用性最高

内容的提问来源于stack exchange,提问作者Fly_37

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:00:02