zoukankan      html  css  js  c++  java
  • 梁梦瑶 20190919-3 效能分析

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628

    git地址https://e.coding.net/hahaa/wf.git

    要求0 以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。 (2分)

    第一次运行时间

     第二次运行时间

     第三次运行时间

    要求1 给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。

    要求 给出代码片断,并说明为什么你会认为此处是瓶颈,预计优化会有达到多好的效果
    1.第一处我猜测获取文件中的单词个数的时候,由于上一周我的正则表达式出现了一点错误,导致统计字数不对,这周我修改了,修改方法是:先将所有单词转换为小写,然后再筛选。
    但我认为此处还可以优化,原因是将大写字母转换为小写字母在进行筛选会很浪费时间。预计优化后运行时间会快那么一点点。

    2.第二处是功能四的函数,为了输出格式问题,我又将单词统计的方法重新书写了一遍,如果考虑优化的话,这个地方还可以修改,可直接运用单词统计的封装函数
    def redirect(txt): #功能四
        words = re.findall(r'[a-z0-9^-]+', txt.lower())
        user_counters=Counter(words)
        total=0
        for user_counter in user_counters:
            total+=1
        print("total %d words
    "%total)
        lsts=user_counters.most_common(10)
        for lst in lsts:
            print("%s  %d"%(lst[0],lst[1]))
    
    

    要求2 通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。 (5分)

    要求 分析为什么此处是瓶颈。

    要求 profile需要得到函数的运行时间和次数。仅得到CPU和内存占用,不得分。

     

     代码片断:

    def redirect(txt): #功能四
        words = re.findall(r'[a-z0-9^-]+', txt.lower())
        user_counters=Counter(words)
        total=0
        for user_counter in user_counters:
            total+=1
        print("total %d words
    "%total)
        lsts=user_counters.most_common(10)
        for lst in lsts:
            print("%s  %d"%(lst[0],lst[1]))

    要求3 根据瓶颈,"尽力而为"地优化程序性能。

    1.优化前:

    def redirect(txt): #功能四
        words = re.findall(r'[a-z0-9^-]+', txt.lower())
        user_counters=Counter(words)
        total=0
        for user_counter in user_counters:
            total+=1
        print("total %d words
    "%total)
        lsts=user_counters.most_common(10)
        for lst in lsts:
            print("%s  %d"%(lst[0],lst[1]))

    优化后:
    将findall()函数进行了优化,函数进行封装。

    def redirect(txt): #功能四
        words = re.findall(r'[a-zA-Z0-9^-]+', txt)
        coTotal(words)

    2.优化前

    def file_name(path): 
        path=path+'.txt'
        try:
            with open(path,encoding='utf-8') as f: 
                content=f.read()
        except FileNotFoundError: #异常处理,找不到文件,输出文件不存在
            msg="The file"+path+"does not exist."
            print(msg)
        else:
            words=re.findall(r'[a-z0-9^-]+',content.lower())
            coTotal(words)

    优化后

    def file_name(path): #功能二实现,输入不带后缀的文件名
        path=path+'.txt'
        with open(path,encoding='utf-8') as f: 
            content=f.read()
            words=re.findall(r'[a-z0-9^-]+',content.lower())
            coTotal(words)

    要求4 再次 profile,给出在 要求1 中的最花费时间的3个函数此时的花费。要求包括截图。(2分)

    三个函数此时的花费:

     再次测试三次:

     

     

  • 相关阅读:
    fastdfs 外网映射问题记录
    fastdfs-nginx下载报错 400
    nginx 代理 websocket
    Jenkins 安装
    实验四.2
    实验四.1
    实验三
    shiyan2
    shiyan1
    作业
  • 原文地址:https://www.cnblogs.com/summerkingy/p/11568471.html
Copyright © 2011-2022 走看看