答案 0 :(得分:5)
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
和multiprocessing
模块很可能是比{{1}更好的选项}。