1

シミュレーションでは、リソースが解放される別の関数を呼び出す前に、ある関数でリソースを要求できるようにしたいと考えています。以下に示す方法を使用すると、機能せず、エラーが発生します。前もって感謝します。

(機能 1):

req = resource.request()
yield req

yield.env.process(function2( ))

(機能 2):

resource.release(req)

これは可能ですか?他の情報が必要な場合は、他に何を教えてください。

4

1 に答える 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
于 2014-07-16T19:24:26.193 に答える