如何从回调中编写一些模拟代码(包括等待事件)?
将我的过程简化为最简单的示例,我想在我的简单模拟中发生事件时启动一些可执行代码。我所做的是将该可执行代码设置为事件的回调。该可执行代码本身具有一些简单的事件处理,特别是超时。在我的真实代码中,这发生在一个进程中,但是这个简化版本,event
在 main 中显示相同的问题行为:
import simpy
if __name__ == '__main__':
env = simpy.Environment()
def simulationRun(event):
print("Starting a run at time [%i]" % env.now)
yield env.timeout(5)
print("Ending a run at time [%i]" % env.now)
event = env.timeout(5)
event.callbacks.append(simulationRun)
print("Starting simulation.")
env.run(20)
print("End of simulation.")
我的预期输出是:
Starting simulation.
Starting a run at time [5]
Ending a run at time [10]
End of simulation.
但是,我的实际输出是:
Starting simulation.
End of simulation.
当我删除 yield 命令时,我得到:
Starting simulation.
Starting a run at time [5]
Ending a run at time [5]
End of simulation.
显然回调设置正确,但重点是模拟simulationRun
. 如何在回调的代码中运行一些模拟代码(包括等待事件)?
这使用 Python 3.4.2 和 simpy。