问题描述
我观察到 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 (将#修改为@)