How to improve the code performance if the most time-consuming part comes to posix.waitpid?(如果最耗时的部分出现在Pox.waitid上,如何提高代码性能?)
问题描述
我使用cprofile来分析一个python程序。最耗时的部分原来是Posix.waitid。我可以做些什么来提高代码性能?有关我的个人资料结果的一行内容,请参见下面的屏幕截图
推荐答案
subprocess.call
花费时间posix.waitpid
当您使用subprocess.call(other_process)
时,它会启动另一个进程并等待其完成。如果另一个进程执行大量工作,则需要花费大量时间。
这就是您的分析器所显示的:大多数情况下,您都在等待其他进程完成。
很有可能,另一个进程实际上有充分的理由花费那么多时间,但探查器无法告诉您任何有关这方面的信息,因为它分析的是此进程,而不是其他进程。
import
而不是call
?
您在注释中写道,您可以导入另一个脚本并运行它的Main函数。这肯定会减少创建新进程的开销,但很可能大部分时间实际上是在另一个进程的主要功能中。
至少使用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
更好的选项。
这篇关于如果最耗时的部分出现在Pox.waitid上,如何提高代码性能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如果最耗时的部分出现在Pox.waitid上,如何提高代码性能?


基础教程推荐
- 究竟什么是“容器"?在蟒蛇?(以及所有的 python 容器类型是什么?) 2022-01-01
- 在 Django Admin 中使用内联 OneToOneField 2022-01-01
- Kivy 使用 opencv.调整图像大小 2022-01-01
- Python 中是否有任何支持将长字符串转储为块文字或折叠块的 yaml 库? 2022-01-01
- 比较两个文本文件以找出差异并将它们输出到新的文本文件 2022-01-01
- 对多索引数据帧的列进行排序 2022-01-01
- matplotlib 设置 yaxis 标签大小 2022-01-01
- kivy 应用程序中的一个简单网页作为小部件 2022-01-01
- 在 Python 中将货币解析为数字 2022-01-01
- Python,确定字符串是否应转换为 Int 或 Float 2022-01-01