import simpy
def A(env):
print(env.now, 'Foo, waiting for 5 time steps.')
yield simpy.Timeout(env, 5)
print(env.now, 'Foo, waited for 5 time steps, terminating.')
def B(env, wait_for):
print(env.now, 'Bar, waiting for processes.')
try:
yield simpy.AllOf(env, wait_for)
print(env.now, 'Bar, successfully waited for processes.')
except simpy.Interrupt:
print(env.now, 'Bar, interrupted, interrupting processes.')
for process in wait_for:
process.interrupt()
print(env.now, 'Bar, interrupted, successfully interrupted processes.')
def C(env, process):
print(env.now, 'Interrupt_If, waiting for 5 time steps')
yield simpy.Timeout(env, 5)
if not process.triggered:
print(env.now, 'Interrupt_If, process not finished, interrupting')
process.interrupt()
print(env.now, 'Interrupt_If, process not finished, successfully interrupted process')
env = simpy.Environment()
process_a = env.process(A(env))
process_b = env.process(B(env, [process_a]))
process_c = env.process(C(env, process_b))
env.run(until=20)