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

How to improve the code performance if the most time-consuming part comes to posix.waitpid?

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

subprocess.call 花时间 posix.waitpid

当您使用 subprocess.call(other_process) 时,会启动另一个进程并等待它完成。如果另一个进程做了很多工作,那会花费很多时间。

这就是您的探查器显示的内容:大多数时候,您正在等待其他进程完成。

很有可能,另一个进程实际上有充分的理由花费那么多时间,但是分析器无法告诉您任何相关信息,因为它正在分析 这个进程,而不是其他进程

import 而不是 call?

您在评论中写道,您可以导入其他脚本,运行它是主要功能。这肯定会消除创建新进程的开销,但可能大部分时间实际上是在另一个进程的主要功能上。

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

另一方面,您想要一个子流程?

不清楚您最初创建子进程的原因,所以我猜您希望并行执行其代码。

好吧,您可以启动一个子进程,而不是等待它完成:

而不是:

subprocess.call(other_process)

这样做:

process = subprocess.Popen(other_process)

# the code which follows is executed in parallel with the other process

现在子进程已启动,您可以使用 process 变量查看它何时完成。

其他选项:threadingmultiprocessing

如果你想运行并行一些你可以导入的代码,那么threading and multiprocessing模块很可能是比[更好的选择=23=].