分析调用并行外部程序的 Python 程序

Posted

技术标签:

【中文标题】分析调用并行外部程序的 Python 程序【英文标题】:Profiling a Python program that calls parallel external programs 【发布时间】:2014-09-23 18:38:51 【问题描述】:

类似于profiling multiprocessing code上的这个问题...

我需要分析我的代码库,并且我计划使用 cProfile。该程序本质上是一个并行运行评估函数的遗传算法。更重要的是,这个求值函数通过命令行从外部调用了另一个 Python 程序。

是否可以使用 cProfile 来分析整体运行情况?基本上,我打算在我的工作函数中开始分析(累积时间、pcalls、内存开销等),但是我担心外部程序对分析器不可见。

【问题讨论】:

【参考方案1】:

您是正确的,外部程序对探查器“不可见”。 cProfile 模块将软件挂钩添加到您的代码中,这些挂钩会在函数调用或返回等事件上触发各种计数器。您将能够看到您对subprocess.call() 的调用或您用于执行外部命令的任何内容,但您不会看到有关外部命令执行的任何详细信息。您将能够看到调用阻塞了多长时间,因此您将了解执行外部命令需要多长时间,但您不会获得它们的分析详细信息。

话虽如此,您也没有理由不能将 cProfile 模块添加到 被调用的 脚本中,并且您将获得主脚本和被调用的外部脚本的配置文件结果。它们只是不在同一个文件中。

【讨论】:

这实际上是我最终做的。我只是检测了对 cProfile 的外部调用,只查看该模块。

以上是关于分析调用并行外部程序的 Python 程序的主要内容,如果未能解决你的问题,请参考以下文章

Java高级知识点:并行计算(外部排序) 及 死锁分析

回调函数执行过程分析

在 Python 中分析子进程 Popen 调用

如何修复 Nsight 分析器中的“低内核并发”警告?

文法分析与递归下降分析

精选的Python框架,库,软件和资源的精选清单墙裂推荐收藏