Python 在Simpy中处理共享资源的子集

Python 在Simpy中处理共享资源的子集,python,simulation,simpy,Python,Simulation,Simpy,我使用Python中的Simpy离散事件模拟来模拟工厂。resource类允许我模拟一次可由有限且固定数量的流程使用的资源(例如,具有有限数量燃油泵的加油站)。粗略地说:流程必须请求这些资源成为用户,并在完成后释放它们(例如,车辆到达加油站,使用燃油泵(如果有),完成后离开) 资源具有有限且固定数量的插槽,进程可以请求这些插槽。如果占用了所有插槽,请求者将被放入队列中。如果一个进程释放一个插槽,那么下一个进程将从队列中弹出并获得一个插槽 在我的例子中,我有一个必须使用一些共享机器的进程列表。每个

我使用Python中的Simpy离散事件模拟来模拟工厂。
resource
类允许我模拟一次可由有限且固定数量的流程使用的资源(例如,具有有限数量燃油泵的加油站)。粗略地说:流程必须请求这些资源成为用户,并在完成后释放它们(例如,车辆到达加油站,使用燃油泵(如果有),完成后离开)

资源具有有限且固定数量的插槽,进程可以请求这些插槽。如果占用了所有插槽,请求者将被放入队列中。如果一个进程释放一个插槽,那么下一个进程将从队列中弹出并获得一个插槽

在我的例子中,我有一个必须使用一些共享机器的进程列表。每个进程都与允许使用的机器的固定子集相关联。如果这个子集对于每个进程都是相同的,那么问题就很容易用内置的方法实现,但是我遇到了问题的这种变化

我尝试将每台可用机器作为一个单独的
资源
,容量为一台(而不是一台容量等于可用机器总数的
资源
),并使用
any\u of
方法将每个进程分配给其相应允许机器子集的第一台可用机器。不幸的是,它不起作用


有没有一种简单或自然的方法来实现这一点?提前谢谢

您可以在机器上使用
存储
。如果机器的容量为1,则存储区中的项目不需要是
资源
实例(如示例中所示),但可以是普通对象(
对象()
的实例就足够了)

导入simpy
def用户(名称、环境、机器存储):
machine=yield machine\u store.get()
使用machine.request()作为请求:
产量需求
打印(名称“Get machine”,机器“at”,环境现在)
产量环境超时(1)
收货机器\仓库放置(机器)
打印(名称“完成时间”,环境现在)
env=simpy.Environment()
machines=[simpy.Resource(env,1)用于范围(2)中的i]
机器存储=简单存储(环境、透镜(机器))
machine\u store.items=机器
对于范围(3)中的i:
环境流程(用户(i、环境、机器库))
环境运行()