在不同函数中释放SimPy的资源

1 投票
1 回答
822 浏览
提问于 2025-04-18 13:33

在一个模拟中,我想在一个函数里请求一个资源,然后再调用另一个函数来释放这个资源。当我使用下面展示的方法时,它不起作用,并且我收到了一个错误。谢谢你的帮助。

(在函数1中):

req = resource.request()
yield req

yield.env.process(function2( ))

(在函数2中):

resource.release(req)

这可能吗?如果需要其他信息,请告诉我。

1 个回答

2

从你的例子来看,不太清楚为什么它不工作。下面的这个模拟是按预期运行的:

import simpy


def func1(name, env, res):
    req = res.request()
    yield req
    print(name, 'got resource at', env.now)
    yield env.process(func2(name, env, res, req))
    print(name, 'done')


def func2(name, env, res, req):
    yield env.timeout(1)
    yield res.release(req)
    print(name, 'released at', env.now)


env = simpy.Environment()
res = simpy.Resource(env, capacity=1)
env.process(func1('A', env, res))
env.process(func1('B', env, res))
env.run()

输出结果:

A got resource at 0
A released at 1
A done
B got resource at 1
B released at 2
B done

撰写回答