本文的原文是:Profiling Python Scripts

我有一个负责一个长期运行任务的 Python 脚本。这个脚本同其他三个系统通信 - 它从系统 #1 和 #2 读取数据,合并它们然后再把它们推送到系统 #3。这是下面的描述。问题是迁移运行在我不满意的一个地方。因为我想知道该脚本的大部分工作是在与哪个慢的外部系统进行通信。Python 有一个非常好用的内建的分析器来回答这类问题。按照这篇文章来学习如何使用它。

分析器(Profiler)

基础用法非常简单。假设你有一个 myscript.py。使用 profiler 运行它,你需要做的是:

$ python -m cProfile -o profile.out myscript.py <other-args>

它将运行这个脚本并且 dump 这个 debug 数据到 profile.out。你也可以省略 -o profile.out 来让统计的 dumped 到脚本最后的 stdout。

Subprocesses

如果你的脚本使用了任何 subprocesses,事情就会变得有点复杂。以我来说,我对脚本的主流程不感兴趣 - 它所做的所有事情就是派生(spawn)一些 worker 子进程。我感兴趣的是在 worker 中发生了什么。

让我们假设你的代码与此类似:

import multiprocessing
import timedef worker(num):time.sleep(3)print 'Worker:', numif __name__ == '__main__':for i in range(5):p = multiprocessing.Process(target=worker, args=(i,))p.start()

你需要引入另外一个间接层:

import multiprocessing
import cProfile
import timedef worker(num):time.sleep(3)print 'Worker:', numdef profile_worker(num):cProfile.runctx('test(num)', globals(), locals(), 'profile-%d.out' %num)if __name__ == '__main__':for i in range(5):p = multiprocessing.Process(target=profile_worker, args=(i,))p.start()

就是这样。这个脚本运行之后,你将得到 profile-0.outprofile-4.out 这4个文件。

读取分析数据

如果你忽略 -o profile.out 这时将在 stdout 得到统计数据。这不是一个完美的解决方案。更好的解决方案是把数据 dump 到文件中然后使用 runsnake 来分析它。为了在 ubuntu 上安装它,你需要 wxpython 包,然后你才可以使用 easy-install 安装它。

$ sudo apt-get install python-wxgtk2.8 python-wxtools wx2.8-doc wx2.8-examples wx2.8-headers wx2.8-i18n
$ sudo easy-install SquareMap RunSnakeRun

由于某种原因我没有在 virtualenv 中运行工作。我需要一个全系统的 easy-install。有人抱怨缺失了 wx 模块。我的系统是 ubuntu 12.04。

然后,就很简单了:

$ runsnake profile.out

你在不同的函数获得了很好的统计分析,调用次数和累计时间。这些数据可以告诉你关于你 app 的很多东西。以我而言我获悉了与其中一个系统通信花费了 90% 的时间。从那里开始我可以优化它。

来源

  • http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script
  • http://stackoverflow.com/questions/11041683/python-multiprocess-profiling
  • http://www.vrplumber.com/programming/runsnakerun/

分析 Python 脚本相关推荐

  1. python程序分析_如何分析Python脚本?

    如Chris Lawlor所示cProfile是一个很棒的工具,可以很容易地用于打印到屏幕上:python -m cProfile -s time mine.py 或提交:python -m cPro ...

  2. python慢在哪里_求大神分析一下我的python脚本慢在哪里?

    请大神们分析下这个python脚本为什么会运行这么慢. 初衷: 公司有个料号系统, 在网站上输入料号就能查询相关的资料, 一般情况下, 我会ctrl+c, 打开网站, ctrl+v, 点击查询, 得到 ...

  3. python统计行号_如何使用Python脚本分析CPU使用情况的?

    用以分析Python中CPU使用情况.CPU分析是通过分析CPU执行代码的方式来测量代码的性能,以此找到代码中的不妥之处,然后处理它们. 接下来我们将看看如何跟踪Python脚本使用时CPU使用情况, ...

  4. graphviz python_工具推荐|我是如何使用Python脚本分析CPU使用情况的?

    在这篇文章中,我将讨论一个工具,用以分析Python中CPU使用情况.CPU分析是通过分析CPU执行代码的方式来测量代码的性能,以此找到代码中的不妥之处,然后处理它们. 接下来我们将重点关注以下几个方 ...

  5. python脚本性能分析

    在进行python开发时需要对python脚本的性能分析,以便对python脚本进行优化,下面使用cProfile和 pstats对python脚本性能分析. cProfile思路 1.使用cProf ...

  6. 反编译工具java知乎_GDA反编译器更新至3.66:支持污点传播分析、方法签名、python脚本...

    本帖最后由 gjden 于 2019-9-24 16:44 编辑 GDA3简介(下载链接: www.gda.wiki:9090) GDA是一款由本人对反编译理论的长期研究和实践而形成的全交互式反编译器 ...

  7. python脚本自动化_GDA python 脚本自动化分析说明

    一.简述 为了能够更加灵活的提供分析和信息交互,GDA从3.6版本开始提供了对python脚本的支持.GDA为分析人员提供了整个APK文件中的类和方法的相关信息,其中分别以列表和字典的方式来组织类和方 ...

  8. 用python实现ai围棋_围棋AI.Leela+Python脚本分析棋谱

    完成了Sabaki+LeelaSabaki+Leela GTP搭建完美围棋AI平台后,在"飞扬围棋论坛"看到有棋友介绍用Leela+Python脚本分析棋谱,于是也试了一下. 软件 ...

  9. python分析人口出生率代码_国家统计局居然也能用的上Python?人口数据Python脚本了解一下?...

    原标题:国家统计局居然也能用的上Python?人口数据Python脚本了解一下? 通过采集国家统计局"国家数据"网站中提供的中国历年人口数据,并对数据进行可视化的探索,发现了一些有 ...

最新文章

  1. java元婴期(24)----java进阶(mybatis(3)---动态sql(重点))
  2. luogu_3966【题解】单词 AC自动机
  3. Invalid format (return structure): Property Name 'Guid', Property Value '000000
  4. overfitting(过度拟合)的概念
  5. Loj#6247-九个太阳【单位根反演】
  6. Android倒计时案例展示
  7. pandas计算一个维度中的所有数值占总价值的占比
  8. mysql中char存储中文_数据库中的字符类型存储字符和汉字的数量
  9. 扬州工业机器人外壳设计排名_世界十大工业机器人制造商公布,排名第一的竟是……...
  10. 选择消失,只因一千个伤心的理由
  11. 华为充电的效果_华为充电特效主题插件下载-华为炫酷充电特效插件1.0.1安卓版-精品下载...
  12. python画笔属性_python 画图 turtle 模块介绍之(一)
  13. 浩瀚先森(guohao1206.com)
  14. 丰田、雷克萨斯决定在今年将亚马逊Alexa应用到部分车型中
  15. 浩辰3D软件入门教程:如何比较3D模型?
  16. 一个人瘦到什么程度身材才算好?其实身材好与体重关系不大
  17. 二、final和static关键字,接口和抽象类
  18. 在做电商网站之前先理清自己建站目的是什么
  19. 腾讯滨海大厦 智能楼宇 智慧建筑 3D可视化管理系统-优锘科技-ThingJS物联网开发案例... 1
  20. 上班族程序员必备的学习网站大全

热门文章

  1. oracle中累计求和_Excel中常见的7种求和公式
  2. android 4.4 webview 上传,android使用webview上傳文件(適配4.4以上系統)
  3. python的集合类型_python集合类型
  4. 用VB无窗口透明Usercontrol编写透明浮动按钮
  5. CMD发现一个得到字符串长度的方法
  6. vb在 ListBox 之中点击右键弹出菜单
  7. 三分钟训练眼球追踪术,AI就知道你在盯着哪个妹子 | TensorFlow.js代码
  8. 谍照曝光!特斯拉正在测试完全自动驾驶
  9. 谷歌终于推出TensorFlow Lite,实现在移动设备端部署AI
  10. 高达大战分晓!日本机器人先赢后输,遭电锯切割惨惨惨 | 附高清完整视频