【发布时间】:2016-05-14 04:20:16
【问题描述】:
我想创建一个带有回调的计时器,可以使用 SimPy 中断或重置。如果中断,我不希望执行回调,如果重置,我希望计时器以与env.now 相同的延迟重新启动。最初只需使用env.timeout,这似乎是一件容易的事情。但是,文档说明:
要真正让时间在模拟中流逝,有超时事件。超时有两个参数:延迟和可选值:Timeout(delay, value=None)。它在创建过程中自行触发,并在现在 + 延迟时自行安排。因此,succeed() 和 fail() 方法无法再次调用,您必须在创建超时时将事件值传递给它。
因为模拟开始触发,我不能添加回调,因为你不能调用fail,所以我不能中断超时。
我考虑过只实现一个等待一个时间步长并检查标志是否被中断或到达它正在等待的env.now 的进程,但这似乎非常低效,如果我有很多计时器(我会的),我担心生成器的数量会压倒模拟。 (超时功能似乎通过在模拟的未来自行安排来工作,这就是为什么你可以让大量的人四处奔波)。
所以规范是 - 创建一个在指定时间后触发回调的事件,但可以在该时间发生之前重置或中断。有什么想法吗?
【问题讨论】:
标签: python simulation simpy