如何在SimPy中中断嵌套进程?

2024-05-23 18:58:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图中断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中的所有进程都必须只定义一层?在


Tags: 方法env定义进程deftimeoutprocessone
1条回答
网友
1楼 · 发布于 2024-05-23 18:58:52

只有调用interrupt()的进程被中断。要中断第二个进程,需要引用它:

如果要中断当前活动进程,请使用Environment.active_process获取对它的引用。在

如果要显式中断第二个进程,请将对该进程的引用存储在shated命名空间中的某个位置。在

最后,您还可以捕获进程1中的中断并将其转发给进程2。如果它想继续工作的话。在

相关问题 更多 >