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

Python SimPy请求资源指定时长未获取则退出的实现方案咨询

SimPy资源请求超时实现方案

你需要的超时等待逻辑无需自行实现循环,基于SimPy原生的事件竞态特性即可完成,具体方案如下:

核心逻辑

  • 发起资源请求后,同时等待「资源分配成功事件」和「指定时长的超时事件」,优先触发哪个事件就执行对应分支
  • 超时触发时主动释放资源请求,避免队列残留无效请求占用资源名额,之后直接退出流程不再执行后续操作

完整实现代码

# 超时时长可自定义,单位和仿真环境时间单位保持一致即可,示例设为10秒
REQUEST_TIMEOUT = 10

def customer_process(name, env, cw):
    print('%s arrives at the carwash at %.2f.' % (name, env.now))
    # 发起资源请求
    request = cw.machine.request()
    # 事件竞态:同时等待资源分配和超时,哪个先返回就走哪个逻辑
    trigger_event = yield request | env.timeout(REQUEST_TIMEOUT)

    if request in trigger_event:
        # 资源分配成功,走正常业务流程
        print('%s gets service at %.2f.' % (name, env.now))
        # 这里替换为你自己的后续操作逻辑
        yield env.timeout(5)
        print('%s finishes service and leaves at %.2f.' % (name, env.now))
        # 资源使用完成后释放
        cw.machine.release(request)
    else:
        # 超时触发,释放请求后直接退出
        cw.machine.release(request)
        print("客户未获得帮助")
        return

注意事项

  • 无论是否成功拿到资源,都需要调用release()方法释放请求,否则会导致资源队列出现无效占位,影响后续正常请求的分配
  • 如果更习惯用with语法管理资源,也可以将资源请求放在with块中,退出with块时会自动释放资源,无需手动调用release()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:27:02