SimPy - 无限运行时错误

问题描述

我观察到 SimPy 事件调度的一些“奇怪”行为。

当 nan 值用作 env.timeout 方法中的延迟时,它有时会覆盖 until = XXX 方法中的 env.run 参数。

我已经概述了一个最小的例子,以显示这种不一致的行为。如果您运行所有 3 个测试用例,您将看到测试 2 永远运行。

查看源代码,似乎是超时和调度之间的一些交互,但没有比这更进一步。

问:有人能帮我理解,为什么 until 参数按照特定顺序在 timout 方法中输入空值时会被覆盖? >


import simpy
import numpy as np
# Set up a minimal SimPy process
def func1(env,time,name):
    while True:
        print(f'process: {name},delayed for {time},time:',env.Now)
        # print(env._queue)
        # print('================')
        yield env.timeout(time)

def test_one():
    """Stops after 20 days - normal process at the start"""
    env = simpy.Environment() 
    env.process(func1(env = env,time = 2,name = '3'))
    env.process(func1(env = env,time = np.nan,name = '2'))
    env.process(func1(env = env,name = '1'))
    env.process(func1(env = env,name = '3'))
    env.run(until = 20)
    
def test_two():
    """Runs forever - normal process at the end"""
    env = simpy.Environment() 
    env.process(func1(env = env,name = '3'))
    env.run(until = 20)
    
def test_three():
    """Stops after 20 days - normal process in 2nd position"""
    env = simpy.Environment() 
    env.process(func1(env = env,name = '3'))
    env.run(until = 20)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)