龙空技术网

Python SimPy 仿真系列 (2)

华策辉弘 41

前言:

如今小伙伴们对“python 通信 场景 仿真”大体比较讲究,朋友们都想要剖析一些“python 通信 场景 仿真”的相关资讯。那么小编在网摘上搜集了一些关于“python 通信 场景 仿真””的相关内容,希望大家能喜欢,你们一起来了解一下吧!

这次文章是关于如何用SimPy来解决两个仿真需求:

如何随时中断恢复Process(进程)

如何动态设置Resource(资源)的数量

相应地这两个需求满足的场景是:

仿真过程中, 某一工序被中断, 中断可以依据一个预先设定的时间或者是不确定时间

仿真过程中, 人力资源也是依据时间变化, 模拟现实中工人的排班安排

回顾资源和进程的概念

ResourceProcess是 SimPy 对人力资源和进程进行抽象的构造.Resource好比一个队列, 其长度就是提前设置好的资源数, 不同的工序就按照时间先后和赋予的优先级进入队列.Process从构造上来说就是一个生成器, 我们可以通过 send 方法传入ExceptionProcess进行打断.比如某个工序需要占用一个工人, 耗时 30 min 来完成一个进程, 当前所有可以调用的工人数是 10, 代码形式如下:

更详细的介绍和资料可以回顾之前的文章Python SimPy 仿真系列 (1)

process 进程的动态调整

存在以下两种情景:

进程随时中断以及恢复

按照时间表对进程进行启动或者终止

要区分一件事情, 中断的时候是让当前进程完成后再中断, 还是立即中断. 具体场景可以想象为一个工人被调离当前岗位, 他应该是先完成手头上的工序, 或者他需要停下手头的工作离开工位.

如果是必须实现进程的随时中断, 只能通过process.interrupt()中断process, 即第一种场景; 假若中断是按照时间表进行, 就可以通过第二种场景, 构建多个不同时间开启的进程来进行模拟.

进程中断的实现

多段进程模拟按时间安排的开关

Resource 资源的动态调整

资源人数按指定的排版表调配由于Resource在实例化后, 就没办法修改了. 为了满足在仿真过程中对资源进行修改, 使用了一个反向的思路. 首先所有资源使用PriorityResource进行实例, 预先设置一个可以调用的最大资源数, 当需要调节资源数的时候, 使用一个优先级为-1request去占用资源, 由于正常的进程默认优先级是0, 通过这样的操作使得,占用资源的占用进程优先级更高, 正常进程可以调用的资源数会变成:可以调用资源=最大资源-占用资源

本文作者:

赵鹏 @Pong

标签: #python 通信 场景 仿真