城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

5种带你轻松分析Python代码的软件库

4月4日 赤雷榭投稿
  通常,人们会使用两种速度来衡量某种编程语言的优劣,即:开发速度和执行速度。对于Python而言,大家往往受益的是它能够快速地编写代码,而忽略了它是否能够快速地运行,并及时完成既定的任务。因此,在出现程序运行缓慢时,我们有必要从代码层面上,找出拖慢的位置和原因,并对其进行处理。
  好消息是,Python提供了许多不同用途的软件库,可方便我们对应用代码进行分析,并找出导致缓慢运行的部分。它们中,有的是只带有标准库的单行工具,有的是可以从运行程序中收集到统计信息的复杂框架。下面,我将向您介绍其中五个可以在PyPI或Python标准库中轻松获得,且能够跨平台运行的软件库。
  1。Time和Timeit
  有时候,您可能只想分析两个代码段从前一个结束到下一个开始运行,是需要几秒钟还是几分钟。对于这样的需求,您可能只需要一个秒表就足够了。
  Python标准库带有两个可用作秒表的功能函数。其中,Time模块具有perfcounter功能。它可以调用操作系统的高精度定时器,以按需获得时间戳。其基本原理是:我们可以在目标操作开始前,调用一次time。perfcounter,然后在操作完成时,再调用一次,以获得两次的时间差。显然,这是一种非常简便易行的时间获取方式。
  而Timeit模块则是会对Python代码进行实质性的审查。它的timeit。timeit功能函数会截取一个代码段,通过运行多次(默认为1百万次),以获得执行该操作所需的平均时间。我们经常可以用它来确定在某个紧密的循环中,单一操作或函数的调用时长。例如,如果您想判定一个列表解析式(listcomprehension)与一个常规列表结构,哪个在执行多次操作时会更快一些(列表解析式通常更快)。
  当然,Time的不足之处在于它只是一个秒表,而Timeit的不足之处在于:其主要用例是各个行或代码块上的各个细微标准差(microbenchmarks)。也就是说,仅当这些代码被单独处理时,这种比较才会有意义。因此,这两种方法都不足以对整个程序进行分析。一旦出现数千行的代码,这两种方法都会耗费您大量的时间。
  2。cProfile
  Python标准库还带有一个整体程序分析器cProfile。在程序运行时,cProfile会通过跟踪代码中的每个函数的调用,以生成一个包含了最常调用函数、以及平均调用时间的列表。
  cProfile具有三大优势:由于它被包含在标准库中,因此现有的Python安装包已经包含了cProfile。它可以分析有关调用行为的许多不同统计信息。例如:它能够将函数调用自己的指令所花费的时间,与该函数所有的其他调用耗时区分开来。据此,您可以判定出到底是该函数本身运行缓慢,还是在其他调用时出现的缓慢。可以实现限定条件的自定义。也就是说,您既可以对整个程序的运行进行采样,又可以仅在指定的函数运行时启用概要分析(toggleprofiling)。通过缩小范围和去除分析时产生的噪声,您可以更好地关注该函数的功能与调用。
  cProfile的不足之处有:默认情况下,它会设置多个采集点,生成大量的统计信息。根据其执行模型,它在捕获每个函数调用时,都会产生大量的流量。因此cProfile不适合通过实时数据的方式,对生产环境中的应用程序进行性能分析。也就是说,它更适合于针对开发过程中的性能分析。
  有关cProfile的更多详细信息。
  3。Pyinstrument
  与cProfile的工作方式类似,Pyinstrument能够通过跟踪目标程序,以报告的形式,反映出那些占用了大部分运行时间的代码。不过,与cProfile相比,Pyinstrument的优点主要体现在如下两个方面:Pyinstrument不会去勾连(hook)函数调用的每个实例,而是会以毫秒为间隔,对程序的调用栈进行采样,因此它能够灵敏地检测出程序中最耗费运行时的部分。Pyinstrument的报告要简洁得多。它能够通过突出显示程序中占用时间最多的函数,以便您能尽快地发现问题,并专注分析原因。
  Pyinstrument同样具有cProfile的各种优点。您可以将它用作应用程序中的对象,来记录所选功能,而不是整个程序的行为。Pyinstrument提供包括HTML格式在内的多种输出形式。当然,您也可以按需查看各个调用的完整时间线。
  此外,如下两个方面值得您的注意:某些通过C编译的扩展程序(例如使用Cython创建的程序),会在通过命令行进行Pyinstrument调用时,可能无法正常工作。不过,如果您在程序本身使用了Pyinstrument,例如:通过使用Pyinstrument分析器的调用包装了main()函数,那么它们还是能够正常工作的。Pyinstrument不能很好地处理在多个线程中运行的代码。此时,您可能需要考虑使用下面将要介绍到的Pyspy。
  4。Pyspy
  与Pyinstrument一样,Pyspy在工作原理上,也是定期采集程序调用栈的状态,而不是记录每一个调用。不过,与PyInstrument不同,Pyspy带有用Rust编写的核心组件(而Pyinstrument使用的是C扩展程序),运行的是带有分析程序的外进程(outofprocess),因此它可以安全地与生产环境中的代码协同使用。
  Pyspy能够轻松地完成许多其他分析工具无法实现的任务,其中包括:分析多线程或带有子处理(subprocessed)机制的Python程序等。此外,Pyspy也可以分析那些使用符号进行过编译的C扩展程序。而对于使用了Cython编译的扩展程序,Pyspy需要使用对应生成的C文件,以便收集正确的跟踪信息。
  我们可以使用如下两种基本方法,来利用Pyspy检查应用程序:使用Pyspy的record命令,并在运行结束后会生成火焰图(flamegraph)。使用Pyspy的top命令,通过实时更新,交互式地显示Python应用程序的内部,并以与Unix的top工具相同的方式显示信息。而且那些单线程栈也可以通过命令行被显示出来。
  不过,Pyspy的最大缺点之一是:它主要适用于从外部分析整个程序、或是某些组件,不适合对某个特定的功能函数进行采样。
  5。Yappi
  Yappi是YetAnotherPythonProfiler(另一个Python分析工具)的缩写。它在功能上,较上述讨论过的工具库只多不少。在默认情况下,PyCharm(译者注:一款为专业Python开发人员准备的IDE)会已安装了Yappi,因此用户在IDE中已经具有了对于Yappi的内置访问权限。
  要使用Yappi,您需要用指令来修饰目标代码,以便针对分析机制进行调用,启动,停止和生成报告。Yappi允许您根据测试的实际需求,在经过时间(walltime)或CPU时间之间进行选择。前者只是一个秒表;后者则可以通过系统原生API,记录下CPU在实际执行代码过程中的用时,以便调整IO的暂停或线程的休眠。可见,CPU时间能够方便您更加精确地了解某些操作(例如:数字代码的执行)的实际用时。
  通过Yappi提供的函数yappi。getthreadstats(),您可以记录任何一个线程活动,检索出对应的统计信息,并分别对其进行分析。您不但无需修饰线程代码,而且可以对统计数据进行过滤和细粒度的排序(类似于cProfile中的此类操作)。
  此外,Yappi的独到之处在于,它可以分析greenlet和coroutine(协程)。作为一种分析并发代码的强大工具,它可以被广泛地用来分析异步metaphor。
  文章来源:https:developer。51cto。comart202012637120。htm
投诉 评论 转载

html5css3实现特殊网页效果11例HTML是用来描述网页的一种语言。HTML指的是超文本标记语言(HyperTextMarkupLanguage)HTML不是一种编程语言,而是一种标记语言(markupl……资源有限,谁能掌握太空的未来呢?对于新大陆的发现,一直是人类好奇心与征服欲的表现,太空这片神奇的世界,也成为每个人心中的梦,从导弹,火箭,人造卫星,无人实验飞船到载人航天飞船,探月工程,宇宙空间站,人类一步步……龙之巢穴大蜥蜴也有不为人知的一面在印度尼西亚的科莫多岛上,这里生活着一种大型蜥蜴科莫多巨蜥。科莫多巨蜥又称:科莫多龙,跟远古的恐龙是远房亲戚,也叫魔龙,属于濒危动物。它们身长3米,体重136公斤。这种蜥蜴是地……清末编制的有史以来第一部学校编纂的语文课本,国学永远经典《澄衷蒙学堂字课图说》初版于清光绪二十七年(1901年),全书四卷(八册),共选三千二百九十一个汉字,插图七百六十二幅。作为有史以来第一部学校编纂的语文课本,几十年间扩印之多、……让孩子在选择中成长(一)让孩子在选择中成长一位非常有影响力和能力的母亲对我说:我真的很羡慕你。看看你的家人,夏阳。22岁时,她在经济上和精神上都独立了。你不用跟她担心爸爸。我的儿子真的很担心。除……无人能破的纪录!印度自行改装27架战斗机,全部坠毁摔死10人印度空军摔飞机似乎早已变成了司空见惯的事情,不摔飞机反而更像新闻。今年1月中旬,印度空军就摔了一架米格21战斗机,幸好飞行员命大,成功跳伞生还。前不久的3月中旬,又摔了第二架,……印度专家中国与世界格格不入,2万就搞定的技术非花2000万现代科技的进步速度越来越快,快到我们普通人已经很难跟的上了,很快科技产品我们都还没有接触过它就可能已经是被淘汰了,这样是目前现代科技当中非常正常的一个现象,毕竟现代科技的更新换……中秋赏月必修课之月亮是什么颜色的?中秋将至,随着社会生活的变迁,也许月饼已经让人感到腻味,但赏月仍然是人们愿意遵循的传统习俗。那细心的你是否曾经注意到,月亮的颜色也在悄然发生变化呢?视频加载中。。。……让天下没有难做的药,难治的病药明康德这次上头条,营业收入同比增长55。31。而是:【6月11日晚间,药明康德发布关于股东违反承诺减持公司股份并通过公司致歉的公告。今年5月14日至6月8日,公司股东上……外星人是像地球一样分成各个国家,还是一个星球就是一个国家?晴朗的夜晚仰望灿烂星河,在感叹宇宙浩瀚的同时,肯定有很多人忍不住思考一个问题外星人存在吗?单从数据角度来看,外星人的存在可以说是一种必然,因为宇宙中的宜居行星数量实在太过……萝卜头一次享受高科技在陕西,萝卜的种植范围还是挺大的,许多农民都会选择在家里种个萝卜,天气气候也适合。可就在大荔县,一位农民利用北斗系统,给种植车安了个自动驾驶,给车根据需要设定参数,系统会……5种带你轻松分析Python代码的软件库通常,人们会使用两种速度来衡量某种编程语言的优劣,即:开发速度和执行速度。对于Python而言,大家往往受益的是它能够快速地编写代码,而忽略了它是否能够快速地运行,并及时完成既……
面向手持移动设备界面的交互设计理论分析尴尬de周三小周末,靠什么走下去?美派遣25架F22前往西太演习,规模史上之最!日本在打什么算遭遇下行拐点叠加四大冲击!企业如何创新迭代?神秘沥青湖网上网赚请先摆正好心态星座配对处女座盘点处女座的最佳伴侣新冠疫苗第二针不打有什么影响艾滋女日记的主要内容读后感走路多膝盖痛是什么原因俄罗斯新式步枪为海浪下的战斗而设计如何面对恐惧

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找