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
模块可能比subprocess
更好。
waitpid
?;) 说真的,这个调用是从哪里来的?你能展示一下导致这个问题的代码吗? - zvonewaitpid
,而是调用了一些其他内置函数,这些函数又间接地调用了它。我猜测subprocess.call
可能会这样做。使用正确的标志,分析器应该能够帮助你找到被调用的内容。你也可以尝试RunSnakeRun——这是一个用于查看分析数据的图形化工具。 - zvone