今天把https://simpy.readthedocs.org/en/latest/simpy_intro/index.html里的简介搬运过来。
第一部分是安装。就一行命令就可以。
pip install simpy
第二部分是说的基本概念。
SimPy是一个离散事件仿真的库。所有活动组件(例如:汽车,用户)的行为都是用进程(processes)建模的。进程存活在环境(environment)中。进程和环境通过各自的事件(event)来交互。
这里有一个例子。
def car(env):
while True:
print('Start parking at %d' % env.now)
parking_duration = 5
yield env.timeout(parking_duration)
print('Start driving at %d' % env.now)
trip_duration = 2
yield env.timeout(trip_duration)
这里定义了一个car进程,它在停车与开车之前切换。每次停车历时5s,开车历时2s。print语句就是打印它的状态和当前时间。(下面灰色的字都没啥用。)
这里定义了一个car进程,car需要一个Environment(env)才能创建新的事件。car的行为在死循环里描述的。它不会停止,它的作用是在执行到yield语句时,告诉模拟系统切换。当yield的语句执行完之后,模拟系统会恢复回这个函数。
这个car在停车跟开车之间轮换。他可以打印当前状态和时间(Environment.now)。它调用Environment.timeout()函数来创建一个timeout事件。这个事件描述car完成停车或者开车的时间。
当car的行为被建模好之后,我们可以创建一个car的实例来看看它是如果行动的。
>>> import simpy
>>> env = simpy.Environment()
>>> env.process(car(env))
<Process(car) object at 0x...>
>>> env.run(until=15)
Start parking at 0
Start driving at 5
Start parking at 7
Start driving at 12
Start parking at 14
我们首先需要创建一个Environment实例,然后把这个实例传给car函数。调用car函数,然后通过Environment.process()把它添加到Environment中。
最后,我们通过调用run函数开始模拟。
底下那5行是程序输出的结果。从0s时间开始,停车5s。然后从5s开始,开车2s,一直到15s的时候结束。
程序开始运行之后,这5行结果是瞬间打印出来的。并不需要等待15s。
待续。之后还有进程交互、共享资源的例子。
=====================================================
我看了下SimPy的源码,所有的文件加起来也没超过100kb,而且代码有很多是注释,所以应该可以全看。
可以做的工作有:一些它的功能扩展,或者把它改写成c++版。