Ich versuche, eine Reihe von verschachtelten Prozessen in Simpy zu unterbrechen. Aus dem folgenden Code geht hervor, dass nur die erste Prozessschicht durch ein Interrupt-Ereignis unterbrochen wird. Ich kann keinen Weg finden, die Prozesse innerhalb eines anderen Prozesses von außerhalb des äußeren Prozesses zu referenzieren, um sie zu unterbrechen. Im Folgenden finden Sie ein Minimum reproduzierbares Beispiel:Wie verschachtelte Prozesse in SimPy zu unterbrechen?
import simpy
env = simpy.Environment()
def process_one():
try:
yield env.timeout(5)
print("inside process one")
yield env.process(process_two())
yield env.timeout(10)
except simpy.Interrupt:
print("interrupted at ", env.now)
def process_two():
try:
yield env.timeout(5)
print("inside process two")
yield env.timeout(5)
print("finishing process two")
except simpy.Interrupt:
print("process two interrupted at", env.now)
process = env.process(process_one())
def interruption(time):
yield env.timeout(time)
process.interrupt()
env.process(interruption(6))
env.run(until=30)
Verfahren ein, wie es sollte unterbrochen wird, sondern Prozess zwei auf dem Geschäft weiter. Wenn ich env.process(process_two)
einer Variablen innerhalb process_one
zuweisen, kann ich nicht außerhalb des Bereichs von process_one
darauf zugreifen. Gibt es eine Möglichkeit, eine Unterbrechung zu verursachen, um alle laufenden Prozesse zu unterbrechen, die in einem übergeordneten Prozess definiert sind, oder müssen alle Prozesse in simpy nur eine Schicht tief definiert sein?