Python 如何分析多线程程序? 我有一个程序,在PAR下执行Waaaayi,我想对它进行配置。然而,它是多线程的,所以我似乎找不到一个好的方法来分析它。有什么建议吗

Python 如何分析多线程程序? 我有一个程序,在PAR下执行Waaaayi,我想对它进行配置。然而,它是多线程的,所以我似乎找不到一个好的方法来分析它。有什么建议吗,python,multithreading,performance,profile,Python,Multithreading,Performance,Profile,我尝试过yappi,但它在OS X上出现故障:( 编辑:这是用python编写的,很抱歉将其置于评测之下…根据您在故障排除方面取得的进展,有些工具可能会为您指明正确的方向 “top”是一个很有帮助的开始,它可以告诉你你的问题是在浪费CPU时间还是只是在等东西 “dtruss-c”可以显示您在哪里花费时间,以及哪些系统调用占用您大部分时间 这两种方法都可以在不了解python的情况下为您提供提示 如果你只是想使用yappi,那么在你的机器上安装一个virtualbox并安装某种Linux并不需

我尝试过yappi,但它在OS X上出现故障:(


编辑:这是用python编写的,很抱歉将其置于评测之下…

根据您在故障排除方面取得的进展,有些工具可能会为您指明正确的方向

  • “top”是一个很有帮助的开始,它可以告诉你你的问题是在浪费CPU时间还是只是在等东西

  • “dtruss-c”可以显示您在哪里花费时间,以及哪些系统调用占用您大部分时间

这两种方法都可以在不了解python的情况下为您提供提示

如果你只是想使用yappi,那么在你的机器上安装一个virtualbox并安装某种Linux并不需要太多的工作。我发现自己在想尝试一些东西的时候经常会这样做


当然,可能有一些我不知道的事情使它变得不可能或不值得付出努力。此外,在另一个运行虚拟化的操作系统上进行评测可能不会给出完全相同的结果,但可能仍然有帮助。

您是多线程还是多处理?如果您只是多线程,那么这就是问题所在。Python目前是h由于全局解释器锁(GIL),在多处理器系统上出现了多线程问题。他们正在为Python3.2解决这个问题——至少这样,您的程序在单核上运行的速度与在多核上运行的速度一样快

如果您不确信,请查看thread ring程序的射击结果。使用运行速度比使用运行速度快


现在,如果改用多处理,评测也会很困难,因为你必须从每个单独的进程运行CProfiler。不过,这是正确的方向。

碰巧,我也在虚拟机上设置了yappi,果然,yappi失败了。thread-ring不是一个好例子,因为thread-ring都是about任务切换——因此Java单核也比Java四核更快。