python - 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, time = np.nan, name = '1'))
env.process(func1(env = env, time = np.nan, name = '3'))
env.run(until = 20)
def test_two():
"""Runs forever - Normal process at the end"""
env = simpy.Environment()
env.process(func1(env = env, time = np.nan, name = '2'))
env.process(func1(env = env, time = np.nan, name = '1'))
env.process(func1(env = env, time = np.nan, name = '3'))
env.process(func1(env = env, time = 2, 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, time = np.nan, name = '2'))
env.process(func1(env = env, time = 2, name = '3'))
env.process(func1(env = env, time = np.nan, name = '1'))
env.process(func1(env = env, time = np.nan, name = '3'))
env.run(until = 20)
解决方案
推荐阅读
- python - 从 python 的协程对象中检索数据
- vue.js - 无法读取 Server.JS 中未定义的属性“名称”
- javascript - Vue.js 在拥抱服务器中的 CORS 咨询后返回未定义的数据
- html - 如何根据用户名授予对 HTML 元素的访问权限?
- node.js - Discord.js awaitReaction 过滤器不起作用
- git - Gitkraken 不显示分支和提交
- r-markdown - 在一个实例中编译文档,而不是在另一个实例中编译(Beamer)
- javascript - 直接链接到 React Netlify 函数应用程序显示为未找到
- javascript - 如何将 Python 代码转换为 JavaScript
- javascript - 包含本地存储数据的表未更新