在simpy中进程的默认触发顺序似乎依赖于它们的创建顺序?我想明确地对进程进行排序,以便它们能够以精确的顺序被触发,而不管它们是何时创建的。如果你需要一个例子,这里有一个3个过程的模拟:吃食物,补充盘子,移除盘子。eat()进程触发plateEmpty事件,期望它被重新填充。但是如果removePlate()过程发生在refillPlate()之前,那么再填充就不会发生了。我想总是先补货。我能强制执行的唯一方法就是订购第44行和第45行。还有别的办法吗?在
[注:我知道优先资源,但这不是我想要的。]import simpy
env = simpy.Environment()
plateEmpty = env.event()
plateGone = env.event()
scoop = 5
def eat(env):
global plateEmpty
global food
while True:
e = yield env.timeout(5) | plateGone
if plateGone in e:
print "Ack! my plate is gone." #bad
break
if food > 0:
food -= 1 # one bite
print env.now,"took a bite"
if food == 0:
plateEmpty.succeed("I want more food")
def refillPlate(env):
global food
global plateEmpty
while True:
e = yield plateEmpty | plateGone
if plateGone in e:
print env.now, "cannot refill."
break
food += scoop
print env.now,"refilled plate"
plateEmpty = env.event() # reset trigger
def removePlate(env):
while True:
e = yield plateEmpty | plateGone
if plateEmpty not in e: continue # trigger was reset
print env.now,"removed plate"
plateGone.succeed()
break
food = scoop
env.process(eat(env))
env.process(removePlate(env)) # line 44: want this triggered last
env.process(refillPlate(env)) # line 45: want this triggered first
env.run(until=100)