Python 如果posix.waitpid是最耗时的部分,如何提高代码性能?

Python 如果posix.waitpid是最耗时的部分,如何提高代码性能?,python,benchmarking,cprofile,Python,Benchmarking,Cprofile,我使用cprofile评测python程序。最耗时的部分是posix.waitpid。我可以做些什么来提高代码性能?请参见下面的屏幕截图,查看我的cprofile结果的一行 子流程调用在posix.waitpid中花费时间 使用subprocess.call(other_process)时,启动另一个进程并等待它完成。如果另一个过程做了很多工作,那就需要很多时间 这就是您的分析器所显示的:大多数时候,您都在等待另一个进程完成 很有可能,另一个进程实际上有很好的理由需要花费这么多时间,但是prof

我使用cprofile评测python程序。最耗时的部分是posix.waitpid。我可以做些什么来提高代码性能?请参见下面的屏幕截图,查看我的cprofile结果的一行

子流程调用
posix.waitpid中花费时间
使用
subprocess.call(other_process)
时,启动另一个进程并等待它完成。如果另一个过程做了很多工作,那就需要很多时间

这就是您的分析器所显示的:大多数时候,您都在等待另一个进程完成

很有可能,另一个进程实际上有很好的理由需要花费这么多时间,但是profiler不能告诉您任何关于这一点的信息,因为它正在分析这个进程,而不是另一个进程

导入
而不是调用? 您在注释中写道,您可以导入另一个脚本并运行它的主功能。这当然会减少创建新流程的开销,但可能大部分时间实际上是在另一个流程的主要功能中

好吧,至少有了
import
,所有东西都将在同一个进程中运行,分析器将能够提供更多有用的信息

另一方面,您想要一个子流程? 不清楚为什么您首先创建了一个子流程,所以我猜您希望并行执行它的代码

那么,您可以启动子流程,而不必等待它完成:

而不是:

subprocess.call(other_process)
这样做:

process = subprocess.Popen(other_process)

# the code which follows is executed in parallel with the other process
现在,子流程已启动,您可以使用
流程
变量查看它何时完成

其他选项:
线程化
多处理

如果您想并行运行一些可以导入的代码,那么和模块很可能比
子流程

更好,避免调用
waitpid
?;)认真地那个电话是从哪里打来的?你能展示你的代码吗?不,我没有调用waitpid。代码非常大。当然,您没有直接调用
waitpid
,但是您调用了其他一些内置函数,这些函数反过来调用了这个函数。我猜
子流程。call
可能会这样做。有了正确的标志,探查器应该可以帮助您找到所调用的内容。你也可以试试——这是一个查看分析数据的图形工具。你完全正确。我确实调用了另外两个python脚本的子流程调用。您认为通过“导入”这些python脚本并调用它们的主函数会比使用subprocess.call更快吗?非常感谢。