gpt4 book ai didi

python - 如何中断 SimPy 中的嵌套进程?

转载 作者:行者123 更新时间:2023-12-01 02:42:07 69 4
gpt4 key购买 nike

我正在尝试中断一组简单的嵌套进程。从下面的代码看来,只有第一层进程被中断事件中断,并且我似乎无法找到一种方法从外部进程外部引用另一个进程中定义的进程以中断它们。下面是一个最小的可重现示例:

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)

进程一按其应有的方式被中断,但进程二继续执行其业务。如果我将 env.process(process_two) 分配给 process_one 内的变量,则无法从 process_one 范围之外访问它。有没有一种方法可以导致中断来中断父进程中定义的所有正在进行的进程,或者 simpy 中的所有进程都必须只定义一层深度吗?

最佳答案

只有调用 interrupt() 的进程才会被中断。要中断第二个进程,您需要对其进行引用:

如果您想中断当前事件的进程,请使用 Environment.active_process以获得对其的引用。

如果您想显式中断第二个进程,请将对其的引用存储在共享命名空间中的某个位置。

最后,您还可以捕获进程一中的中断并将其转发给进程二。进程可以继续工作(如果它愿意的话)。

关于python - 如何中断 SimPy 中的嵌套进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45576706/

69 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com