【问题标题】:How to interrupt nested processes in SimPy?如何中断 SimPy 中的嵌套进程?
【发布时间】:2017-08-08 19:34:45
【问题描述】:

我试图在 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)

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

【问题讨论】:

    标签: python simpy


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 2016-04-04
      • 2020-08-24
      • 1970-01-01
      相关资源
      最近更新 更多