如果最耗时的部分到了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
变量查看它何时完成。
其他选项:threading
、multiprocessing
如果你想运行并行一些你可以导入的代码,那么threading
and multiprocessing
模块很可能是比[更好的选择=23=].
我使用 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
变量查看它何时完成。
其他选项:threading
、multiprocessing
如果你想运行并行一些你可以导入的代码,那么threading
and multiprocessing
模块很可能是比[更好的选择=23=].