[ PROMPT_NODE_27424 ]
resources
[ SKILL_DOCUMENTATION ]
# SimPy 共享资源
本指南涵盖了 SimPy 中用于建模拥塞点和资源分配的所有资源类型。
## 资源类型概述
SimPy 提供了三大类共享资源:
1. **Resources** - 有限容量资源(例如:加油泵、服务器)
2. **Containers** - 同质散装物料(例如:燃料箱、筒仓)
3. **Stores** - Python 对象存储(例如:项目队列、仓库)
## 1. Resources
对一次只能由有限数量进程使用的资源进行建模。
### Resource (基础)
基础资源是一个具有指定容量的信号量。
python
import simpy
env = simpy.Environment()
resource = simpy.Resource(env, capacity=2)
def process(env, resource, name):
with resource.request() as req:
yield req
print(f'{name} has the resource at {env.now}')
yield env.timeout(5)
print(f'{name} releases the resource at {env.now}')
env.process(process(env, resource, 'Process 1'))
env.process(process(env, resource, 'Process 2'))
env.process(process(env, resource, 'Process 3'))
env.run()
**关键属性:**
- `capacity` - 最大并发用户数(默认:1)
- `count` - 当前用户数
- `queue` - 排队请求列表
### PriorityResource
扩展了具有优先级的基础资源(数字越小,优先级越高)。
python
import simpy
env = simpy.Environment()
resource = simpy.PriorityResource(env, capacity=1)
def process(env, resource, name, priority):
with resource.request(priority=priority) as req:
yield req
print(f'{name} (priority {priority}) has the resource at {env.now}')
yield env.timeout(5)
env.process(process(env, resource, 'Low priority', priority=10))
env.process(process(env, resource, 'High priority', priority=1))
env.run()
**使用场景:**
- 紧急服务(救护车优先于普通车辆)
- VIP 客户队列
- 带优先级的作业调度
### PreemptiveResource
允许高优先级请求中断低优先级用户。
python
import simpy
env = simpy.Environment()
resource = simpy.PreemptiveResource(env, capacity=1)
def process(env, resource, name, priority):
with resource.request(priority=priority) as req:
try:
yield req
print(f'{name} acquired resource at {env.now}')
yield env.timeout(10)
print(f'{name} finished at {env.now}')
except simpy.Interrupt:
print(f'{name} was preempted a