python - 在 SimPy 中以与请求位置不同的函数释放资源

标签 python simulation simpy

在模拟中,我希望能够在调用另一个释放资源的函数之前在一个函数中请求资源。当我使用下面所示的方法时,它不起作用并且出现错误。 提前致谢。

(在函数 1 中):

req = resource.request()
yield req

yield.env.process(function2( ))

(在函数 2 中):

resource.release(req)

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

最佳答案

从你的例子来看,不清楚为什么它不起作用。下面的模拟按预期工作:

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

关于python - 在 SimPy 中以与请求位置不同的函数释放资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24785278/

相关文章:

python - Simpy - 何时使用yield以及何时调用该函数

Python:MySQL 查询失败

python - IronPython SQLite3操作错误: unable to open database file

python - 释放另一个进程占用的资源

web-services - 是否有模拟 Web 服务(REST 和 SOAP)进行测试的工具?

Java swing 2D 重力模拟不起作用

python - Process 使用 Simpy 在 Python 中生成一个 Process

python - 使用map或split(pyspark)后如何查看RDD的内容?

python - 创建每 n 个元素跳过 k 个元素的整数序列

simulation - Xilinx、Isim 在仿真中对 Verilog 整数类型的处理