我可以用-m标志运行多个模块吗?

时间:2014-08-13 14:16:39

标签: python profile memory-profiling cprofile

我希望profile我的python代码尽可能多的参数: 1.时间(目前有memory_profiler) 2.记忆(目前有cProfileprofile) 3. I / O - 每秒读/写字节数(没有找到任何)

最简单的事情(据我所知)是在上面的模块上使用-m标志(例如 python -m cProfile [-o output_file] [-s sort_order] myscript.py

那么,如何对memory_profiler和cProfile / profile模块使用-m标志?

1 个答案:

答案 0 :(得分:1)

我不相信你可以在多个模块中使用-m标志。但是,在脚本中使用cProfile并不困难:

import cProfile, pstats

profiler = cProfile.Profile()    # create profiler
profiler.enable()                # start profiling

# do stuff

profiler.disable()               # end profiling

with open('profile.txt', 'w') as fo: # open a file to print the stats
    pstat_profile = pstats.Stats(profiler, stream=fo) # create a pstats object from the profile bound to a file stream
    pstat_profile = print_stats() # print stats to a file

这将为您提供一个漂亮而有条理的时间统计打印输出。现在,您可以使用-m为memory_profiler运行此修改过的脚本并同时使用。

我不知道有任何基于Python的工具来监控访问。但是,Google搜索“测量IO速度”会在所有地方出现点击,因此您应该能够找到第三方实用程序(或者如果您使用的是Linux,则可以找到一些内置工具like DD)您可以在启动脚本时用于跟踪IO性能。

您最终会在IO记录器内部的内存分析器下运行时间分析脚本,但我认为它们应该很好地协同工作,并且它们的交互应该很容易发现。例如,时间分析器的脚本内启动将在内存配置文件中显示为内存分配,但您知道可以忽略它们。