如果最耗时的部分出现在Pox.waitid上,如何提高代码性能?

How to improve the code performance if the most time-consuming part comes to posix.waitpid?(如果最耗时的部分出现在Pox.waitid上,如何提高代码性能?)
本文介绍了如果最耗时的部分出现在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变量查看它何时结束。

其他选项:threadingmultiprocessing

如果要并行运行某些可以导入的代码,则threadingmultiprocessing模块很可能是比subprocess更好的选项。

这篇关于如果最耗时的部分出现在Pox.waitid上,如何提高代码性能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)