简单的新手在这里。我刚开始用 simpy 进行 Speaker-Moderator 模拟。这是我的代码
import simpy
def speaker(env):
try:
print("Speaker start to talk at: {}".format(env.now))
speak_time = 40
print ("Speaker want to speak for {}".format(speak_time))
yield env.timeout(speak_time)
print ("Speaker finish the talk at: {}".format(env.now))
except simpy.Interrupt as interrupt:
print (interrupt.cause)
def moderator(env):
for i in range(3):
print("Moderator let the speaker number {} to begin the speak".format(i))
speaker_proc = env.process(speaker(env))
print("Time now: {}".format(env.now))
time_limit = env.timeout(30)
results = yield speaker_proc | time_limit
print("Moderator check whether speaker passed the time limit or no")
print("Time limit passed: {}".format (speaker_proc not in results))
if speaker_proc not in results:
print("Time now: {}".format(env.now))
speaker_proc.interrupt()
print ("Moderator stop the talk at: {}".format(env.now))
print()
print()
env = simpy.Environment()
env.process(moderator(env))
env.run()
当我以 speak_time > 30 或 speak_time < 30 运行它时,它没有问题,但如果我将函数扬声器中的 speak_time 更改为 30,则会出现如下错误:
RuntimeError: <Process(speaker) object at 0x9e17930> has terminated and cannot be interrupted.
发生了什么?