zoukankan      html  css  js  c++  java
  • 使用memory_profiler异常

    在使用memory_profiler模块0.55.0版本执行命令诊断程序内存用量时,遇到下面错误:

    C:UsersChenDesktoppython_doc第四模块课件>python -m memory_profiler tr1y.py
    Traceback (most recent call last):
      File "C:UsersChenPython36lib
    unpy.py", line 193, in _run_module_as_main
        "__main__", mod_spec)
      File "C:UsersChenPython36lib
    unpy.py", line 85, in _run_code
        exec(code, run_globals)
      File "C:UsersChenPython36libsite-packagesmemory_profiler.py", line 1227, in <module>
        exec_with_profiler(script_filename, prof, args.backend, script_args)
      File "C:UsersChenPython36libsite-packagesmemory_profiler.py", line 1128, in exec_with_profiler
        exec(compile(f.read(), filename, 'exec'), ns, ns)
    UnicodeDecodeError: 'gbk' codec can't decode byte 0x8b in position 331: illegal multibyte sequence

    根据提示我找到memory_profiler模块,查看源码line1128附近,原来在line1127出了问题:

    因为我用的是国产windows系统,默认字符编码是gbk,若无指定打开文件时也会用gbk,但是我要检测的脚本文件使用utf-8字符编码,因此,改成

    with open(filename, encoding='utf-8')就好了,顺利输出诊断信息:

    C:UsersChenDesktoppython_doc第四模块课件>python -m memory_profiler tr1y.py
    (1.800000000000033, -1.800000000000033)
    length of x: 1000
    total elements: 1000000
    Filename: tr1y.py
    
    Line #    Mem usage    Increment   Line Contents
    ================================================
        49  111.680 MiB  111.680 MiB   @profile
        50                             def calculate_z_serial_purepython(max_iter, zs, cs):
        51  119.312 MiB    7.633 MiB       output = [0] * len(zs)
        52  119.336 MiB    0.000 MiB       for i in range(len(zs)):
        53  119.336 MiB    0.008 MiB           n = 0
        54  119.336 MiB    0.012 MiB           z = zs[i]
        55  119.336 MiB    0.000 MiB           c = cs[i]
        56  119.336 MiB    0.004 MiB           while abs(z) < 2 and n < max_iter:
        57  119.320 MiB    0.000 MiB               z = z * z + c
        58  119.320 MiB    0.000 MiB               n += 1
        59  119.336 MiB    0.000 MiB           output[i] = n
        60  119.258 MiB    0.000 MiB       return output

     顺便说一下:从诊断信息来看,在执行line51生成output列表时,可见7MB的RAM被加入这个进程,但这不意味着output列表大小就是7MB,只是进程在列表内部分配时增长了大约7MB。

  • 相关阅读:
    app store 上架流程
    iOS代码规范
    【转】clang warning 警告清单(备查,建议直接command + F 速查 )
    计算文字的高度和宽度--以微博会话界面中用户名(userName)为例
    找树节点在二叉树中的深度
    partition函数两种实现方法
    《剑指offer》19题自己实现求普通二叉树的镜像
    删除文件就弹出对话框“不能完成此操作,因为找不到一个或多个需要的项目。(错误代码 -43)
    IntelliJ IDEA快捷键
    idea for mac 最全快捷键整理
  • 原文地址:https://www.cnblogs.com/tarantino/p/10802567.html
Copyright © 2011-2022 走看看