当前位置: 首页 > news >正文

网站建设的常见问题新华路街道网站建设

网站建设的常见问题,新华路街道网站建设,没注册可以做网站吗,薛城区住房和城乡建设局网站文章目录 基础内容生成器介绍保存和恢复生成器的状态 参考文章#xff1a; SimPy Discrete event simulation for Pythonpython离散事件仿真库SimPy官方教程离散事件仿真原理DES 基础内容 生成器介绍 离散事件仿真库Simpy的执行效率之所以很高#xff0c;关键在于生成器的… 文章目录 基础内容生成器介绍保存和恢复生成器的状态 参考文章 SimPy Discrete event simulation for Pythonpython离散事件仿真库SimPy官方教程离散事件仿真原理DES 基础内容 生成器介绍 离散事件仿真库Simpy的执行效率之所以很高关键在于生成器的使用在Python中通过yield来暂时停止进程再次调用时才从中断的位置开始。这会有什么特点呢就是程序并不需要在一开始完全执行而是随着一点点推进调用的时候才执行相应的操作因此它不像常规的序列如列表一样在内存中保存所有的元素值这种惰性计算地特性显著地减少了内存使用但也使得生成器对象的状态不容易序列化和反序列化。 如下是一个简单的例子 def generator(n):while True:for j in range(n):yield j100先创建一个生成器并进行调用得到的返回值如下 a generator(3) print(next(a)) print(next(a)) print(next(a))注意yield 中断的是具体生成器的进程因此创建多个不同生成器一个对象也可以有多个生成器可以实现多事件线的启停这种特性非常适合用来进行离散仿真。 对于同一个生成器调用3次返回的结果为 100 101 102那继续调用呢调用6次后的返回结果如下 100 101 102 100 101 102由于 while True 的存在且暂无终止条件只要一直调用生成器就会一直抛出计算结果。 保存和恢复生成器的状态 现在我想实现这么个功能就是生成器在调用到一半的时候对他进行复制并希望复制的新的生成器能从源生成器的中断位置继续执行如下代码在第一次调用 a 生成器时返回 100复制为 b 生成器希望 b 的下次调用抛出 101那么执行后会出现什么情况 def generator(n):while True:for j in range(n):yield j100a generator(3) print(next(a))b deepcopy(a) print(next(b))结果会返回类型错误。 TypeError: cannot pickle generator object前面提到生成器对象的状态不容易序列化和反序列计算结果并不存储在内存中这就使得我们如果想要保存生成器的状态并进行复制就只能考虑将这些生成器的值保存到可序列化的数据结构当中比如列表或元组通过这些可序列化的数据结构来保存生成器的状态。那如何基于这些保存的可序列化的数据进行恢复呢我们知道生成器暂停进程以及抛出一次次的计算结果是因为函数 yield因此恢复生成器状态只需要模拟生成器照常记录计算结果在计算结果到达记录状态之前跳过yield。 为了恢复数据需要记录生成器的当前状态以及需要恢复的状态这里我们建立一个 event 类初始化的成员属性如下 class event:def __init__(self) - None:self.record [] # 当前状态self.from_record [] # 待恢复状态记录当前状态需要在每次运行到 yield 之前进行记录这里记录的内容不一定是要yield语句的执行内容可以只是一些标记的关键数据。 class event:def __init__(self) - None:self.record []self.from_record []def generator(self, n):while True:for j in range(n):self.record.append(j100)yield j100记录完当前状态后将当前状态与待恢复状态进行比较如果不同则跳过 yield若相同则释放到 yield 并完成状态的恢复。并建立一个成员方法 set_init_record 用来定义生成器的起始状态。 这里记录的状态可以是任何数据结构当前状态和待恢复状态之间的比较也可以是任何逻辑运算但要注意不论是记录状态还是对比恢复状态的操作都是放在 yield 语句之前不改变外层的循环。 class event:def __init__(self) - None:self.record []self.from_record []def generator(self, n):while True:for j in range(n):self.record.append(j100)if len(self.record) len(self.from_record):continueelse:yield j100def set_init_record(self, init_record):self.from_record init_record此时通过复制一个 event 对象的当前记录信息将记录信息作为起始状态传入另一个 event 对象即实现了生成器的状态复制进行如下实验 a event() a_g a.generator(3) print(f\na的抛出: , next(a_g))b event() b.set_init_record(deepcopy(a.record)) b_g b.generator(3) print(f\nb的抛出: , next(b_g)) print(fb的抛出: , next(b_g)) print(fb的抛出: , next(b_g)) print(fb的抛出: , next(b_g)) print(fb的抛出: , next(b_g))输出结果为 a的抛出: 100b的抛出: 101 b的抛出: 102 b的抛出: 100 b的抛出: 101 b的抛出: 102显然的这种方式相当于做了个标记跳过了事件抛出的过程但是所有的计算步骤都会重新执行一遍但它是完完整整地恢复了整个生成器。因此换个思路有没有必要完整地恢复整个生成器的抛出序列还是记录待恢复状态然后基于这个状态出发进行仿真。
http://www.huolong8.cn/news/12145/

相关文章:

  • 河北住房和城乡建设厅网站首做相片网站
  • 继续访问这个网站店铺设计餐饮
  • asp网站如何打开沧州网站排名优化
  • 个人博客网站建设业务wordpress10和3优先级
  • 网站建设中所涉及的所有链接建设哈尔滨公共资源交易中心官网
  • 站群宝塔批量建站湖南人文科技学院官网
  • wordpress网站如何播放视频教程福州高端网站建设
  • .net 大型网站开发外贸网站如何换域名
  • 网站建设维护专员岗位说明网页设计图标素材
  • 网站开发待遇如何微盟微商城电商小程序
  • 门户网站推广介绍方案wordpress模板免费
  • 网站开发公司云鲸互创怎么联系四川省建设厅网站填报获奖
  • 做器材的网站南京建设项目环评公示期网站
  • 邢台制作网站手机网站做seo
  • 做网站需要续费吗做网站的组要具备哪些素质
  • 郑州网站制作_郑州网页制作_做网站设计_河南网站制作网网站怎么做联系我们页面
  • 网站建设公司收费如何做公司培训网站
  • 阿里企业网站托管创意设计网站
  • 益保网做推广网站吗惠州专业做网站
  • mvc网站建设设计报告微站和网站数据
  • 性男女做视频观看网站h5制作软件下载
  • 合肥网站制作优秀手机网站模板图片
  • 做网站赚钱的点在哪里宁波做网站十大公司哪家好
  • 网站优化公司排名一级a做爰片免费网站下载
  • seo优化的技巧网站排名云优化工具
  • 河北省住房和城身建设厅网站网站建设后台是怎么制作的
  • 网站的客户体验西红门模板网站建设
  • 公司网站域名到期设计网站首页1
  • 网站建设是永久使用吗网站建设重要
  • 上海网站建设找缘魁南昌免费做网站