De-Sim示例分析(六)De-Sim性能_de sim-程序员宅基地

技术标签: python  

De-Sim的最后一个示例展示了De-Sim的性能,事件的执行速度达到了每秒10000+
在这里插入图片描述
示例代码如下

import time
import de_sim

class InitMsg(de_sim.EventMessage):
    'An InitMsg message'

def obj_name(i):
    return f'sim_obj_{i}'


class CyclicalMessagesSimulationObject(de_sim.SimulationObject):
    """ Send events around a cycle of objects """

    def __init__(self, name, obj_num, cycle_size):
        super().__init__(name)
        self.obj_num = obj_num
        self.cycle_size = cycle_size

    def next_obj(self):
        next = (self.obj_num + 1) % self.cycle_size
        return self.simulator.simulation_objects[obj_name(next)]

    def send_next_event(self):
        # send event to next CyclicalMessagesSimulationObject
        self.send_event(1, self.next_obj(), InitMsg())

    def init_before_run(self):
        self.send_next_event()

    def handle_event(self, event):
        self.send_next_event()

    event_handlers = [(InitMsg, 'handle_event')]

    # register the message types sent
    messages_sent = (InitMsg, )


def make_cyclical_messaging_network_sim(simulator, num_objs):
    # make a simulation with cyclical messaging network
    sim_objects = [CyclicalMessagesSimulationObject(obj_name(i), i, num_objs)
                   for i in range(num_objs)]
    simulator.add_objects(sim_objects)

def prep_simulation(simulator, num_sim_objs):
    simulator.reset()
    make_cyclical_messaging_network_sim(simulator, num_sim_objs)
    simulator.initialize()

def test_performance():
    simulator = de_sim.Simulator()
    end_sim_time = 100
    num_sim_objs = 4
    max_num_profile_objects = 300
    max_num_sim_objs = 5000
    print()
    print(f"Performance test of cyclical messaging network: "
          f"end simulation time: {end_sim_time}")
    unprofiled_perf = ["\n#sim. obs\t# events\trun-time (s)\tevents/s".expandtabs(14)]

    while num_sim_objs < max_num_sim_objs:

        # measure execution time
        prep_simulation(simulator, num_sim_objs)
        start_time = time.process_time()
        num_events = simulator.simulate(end_sim_time).num_events
        run_time = time.process_time() - start_time
        unprofiled_perf.append(f"{num_sim_objs:>9}\t{num_events:>7}\t"
                               f"{run_time:11.3f}\t{num_events / run_time:8.0f}".expandtabs(14))
        num_sim_objs *= 4

    print("\n".join(unprofiled_perf))

test_performance()
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44924355/article/details/125553414

智能推荐

微信公众平台开发教程(十一)微信企业号上线_微信公众号基于企业连接用户的一个工具-程序员宅基地

文章浏览阅读1.5k次。原文地址:http://www.cnblogs.com/yank/p/3989255.html什么是企业号?企业号是微信为企业客户提供的移动应用入口关注更安全只有企业通讯录的成员才能关注企业号,分级管理员、保密消息等各种特性确保企业内部信息的安全。应用可配置企业可自行在企业号中可配置多个服务号,可以连接不同的企业应用系统,只有授权的企_微信公众号基于企业连接用户的一个工具

NYOJ 469 擅长排列的小明 II_小明拥有469-程序员宅基地

文章浏览阅读522次。下面是规律的推导过程:(为了简便起见,我们用Ai代表第i个数字)由于A1一直是1,所以A2只能是2或3。1.当A2=2时,从A2到An的排列(2~n)相当于从A1到An-1的排列(1~n-1)(把每个数字都加1),一共有f[n-1]种情况。2.当A2=3时,A3可能为2,4,5。 当A3=2时,A4一定等于4,此时从A4到An的排列(4~n)相当于从A1到An-3_小明拥有469

宽带安装带来的困扰_安装联通宽带的困扰-程序员宅基地

文章浏览阅读1k次。最近孩子刚出生,居家盘踞在岳母家里。老早就想着给岳母家装个宽带,顺便了却自己无法上网的遗憾。恰好这几天又请了公休假,闲着没事,在反复权衡之后,选择了联通的宽带。10M光纤、无限时,600元/年,比电信优惠多了。 宽带是装上了,但每次更换电脑,总要把网络线拔来拔去的,很是麻烦。从同事那里拿来一个USB-LAN转换器装上,不仅到处都是线,而且USB不稳定,老断线,麻烦透了。去同事给出个主意_安装联通宽带的困扰

Jenkins地址无法访问 http://localhost:8080/_搜索端口8080,内容包含jenkins的网站-程序员宅基地

文章浏览阅读5.7k次,点赞3次,收藏4次。服务器上都配置完毕,jenkins启动成功后访问不到这个url检查一下你的端口是否开启firewall-cmd --list-ports如果发现没有jenkins的端口,否则加上firewall-cmd --permanent --zone=public --add-port=8080/tcp开启已经配置好的jenkins的端口,然后在重启防火墙,注意一定要重启防火墙!systemctl reload firewalld注意jenkins默认的是8080端口,修改的话要到指定目录下修改vi_搜索端口8080,内容包含jenkins的网站

谈谈中间件:AddSingleton AddScoped AddTransient 三者的差异-程序员宅基地

文章浏览阅读5.4k次。简介AddSingleton:此方法创建一个 Singletion 服务。首次请求时创建 Singleton 服务。然后,所有后续的请求中都会使用相同的实例。因此,通常每个应用程序只创建一次 Singleton 服务,并且在整个应用程序生命周期中使用该单个实例 AddScoped:此方法创建一个 Scoped 服务。在范围内的每个请求中创建一个新的 Scoped 服务实例。例如在 We..._addsingleton

Eastmoney-Spyder:股吧网页数据抓取分析(一)_股吧爬虫-程序员宅基地

文章浏览阅读1.6w次,点赞33次,收藏208次。股吧数据抓取分析_股吧爬虫

随便推点

深入解析Java代理模式(静态代理和动态代理)_java 静态代理为什么多一个服务就要多一个代理类-程序员宅基地

文章浏览阅读177次。1、什么是代理模式代理模式就是使用代理对象来替代真实对象的访问,这样就可以在不修改目标对象的基础上,增加新的功能操作,扩展目标对象的功能。简单来说,代理就是增强目标方法的功能。举例来说,比如一个service方法中有增删改查等诸多操作数据库的方法,每个方法在完成自己本身业务逻辑的情况下,还需要在业务逻辑前后增加开启事务和提交事务的逻辑。这样会造成大量的重复代码,这时候,我们就可以使用代理模式,把service作为目标对象,再新建一个增强类,这个类中有两个方法,开启事务和提交事务。再创建一个代理类,用来_java 静态代理为什么多一个服务就要多一个代理类

4 pwm 什么时候采样电流_电机控制之电流采样及坐标变换第一部分-程序员宅基地

文章浏览阅读3k次。前言 永磁同步电机(PMSM)应用范围广泛,经常用于新能源汽车、机床、工业等领域。在实际使用中,我们经常采用矢量控制算法(FOC)完成PMSM的高性能控制。 矢量控制中通常采用双闭环结构,其中外环为速度环,内环为电流环。为了实现PMSM高性能控制,我们会采用各种复杂的算法来实现目标,这其中电流环相关算法又是重中之重。但是需要指出,电流环性能好坏除了与采用的算法有关之外,还与..._pwm电流采样

AUTO-INC锁和AUTO_INCREMENT在InnoDB中处理方式_autoinc_increment-程序员宅基地

文章浏览阅读8.4k次,点赞5次,收藏7次。AUTO-INC LocksAn AUTO-INC lock is a special table-level lock taken by transactions inserting into tables with AUTO_INCREMENT columns. In the simplest case, if one transaction is inserting values i_autoinc_increment

db2查最新值的前一天值_NBA 2K21 最新球员能力值公布-程序员宅基地

文章浏览阅读266次。2K21能力值 今天,NBA 2K21公布了最新的球员能力值,勒布朗-詹姆斯以98的能力值高居第一。排在第2到第6的依次是:扬尼斯-阿德托昆博(97)、詹姆斯-哈登(96)、凯文-杜兰特(95)、斯蒂芬-库里(95)和达米安-利拉德(95)。 接下来的东契奇的能力值达到94,之后的依次是:吉米-巴特勒(93)、凯里-欧文(90)和杰森-塔图姆(90)。 90..._威少2k21能力值

后处理——Bloom效果_后处理效果-程序员宅基地

文章浏览阅读822次。// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Unity Shaders Book/Chapter 12/Bloom" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} ..._后处理效果

Linux镜像_ntp镜像-程序员宅基地

文章浏览阅读3.7k次。二、 Linux镜像2.1 下载安装镜像http://ftp.sjtu.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso注:此镜像为示例,具体实际镜像版本以实际要求为准2.2 创建一个空镜像#qemu-img create -f qcow2 [filename] 10G2.3 安装linux镜像#qemu-syst..._ntp镜像

推荐文章

热门文章

相关标签