当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如果最耗时的部分是posix.waitpid,如何提高代码性能?》经验,为你挑选了1个好方法。

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



1> zvone..:

subprocess.call 花时间在 posix.waitpid

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

那就是您的探查器所显示的:大多数时候,您正在等待其他过程完成。

实际上,另一个进程确实有充分的理由要花那么多时间,但是Profiler无法告诉您任何有关该进程的信息,因为它是在对这个进程进行概要分析,而不是对另一个进程进行概要分析。

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

如果您想并行运行一些可以导入的代码,那么threadingmultiprocessing模块相比,可能是更好的选择subprocess

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有