私はsimpyでネストされたプロセスのセットを中断しようとしています。次のコードから、最初のプロセスのレイヤーだけが割り込みイベントによって中断されているように見えます。外部プロセスの外側から別のプロセス内で定義されたプロセスを参照する方法を見つけることができません。以下は再現可能な最小限の例です:SimPyでネストされたプロセスを中断する方法は?
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)
プロセス1は中断されますが、プロセス2は業務を継続します。 env.process(process_two)
をprocess_one
の変数に代入すると、process_one
の範囲外にアクセスすることはできません。親プロセス内で定義されているすべての進行中のプロセスを中断させたり、simpy内のすべてのプロセスを1つの深い層だけ定義しなければならない方法がありますか?