【发布时间】:2014-09-30 04:39:46
【问题描述】:
我试图弄清楚 while 循环如何确定要使用多少内存。
在基础层面:
while True:
pass
如果我在 PHP 中做类似的事情,它会让我的本地主机变得爬行。但在这种情况下,我希望它几乎没有使用。
那么对于 python 中的无限循环,我应该期望它会占用大量内存,还是会根据正在做什么以及在哪里进行扩展?
【问题讨论】:
标签: python loops while-loop infinite
我试图弄清楚 while 循环如何确定要使用多少内存。
在基础层面:
while True:
pass
如果我在 PHP 中做类似的事情,它会让我的本地主机变得爬行。但在这种情况下,我希望它几乎没有使用。
那么对于 python 中的无限循环,我应该期望它会占用大量内存,还是会根据正在做什么以及在哪里进行扩展?
【问题讨论】:
标签: python loops while-loop infinite
您的无限循环是无操作的(它不执行任何操作),因此它不会增加超出程序其余部分使用的内存使用量。要回答您的问题,您需要发布您怀疑会导致内存问题的代码。
然而,在 PHP 中,相同的循环将“挂起”,因为 Web 服务器期望将响应发送回客户端。由于没有收到响应,网络浏览器将简单地“冻结”。根据 Web 服务器的配置方式,它可能会选择结束进程并发出超时错误。
如果您使用 Python 和 Web 框架并在您的一个方法中放置一个无限循环以向客户端返回响应,您也可以这样做。
如果您从 shell 运行等效的 PHP 代码,它将具有与使用 Python(或任何其他语言)编写的相同的效果。也就是说,您的控制台将阻塞,直到您终止该进程。
我问是因为我想创建一个无限运行的程序, 但我不确定如何确定它的足迹或它会多少 从系统资源中获取。
一个无限期运行的程序(我想这就是你的意思)——它通常有两种情况:
它等待在触发器上做一些工作(就像一个网络服务器无限期地运行,但它只是坐在那里直到有人访问你的网站)
它正在执行一个需要很长时间的过程。
对于#2,您需要通过确定正在完成的工作来确定资源使用情况。
如果它构建一个大型项目列表来进行一些计算/排序,那么内存使用量将随着列表的增长而增长。
如果它处理一堆文件,并且在此过程中,它会生成大量存储在磁盘上的输出 - 然后磁盘使用量会增加,然后在处理完成时缩小。
如果它是一个渲染引擎,那么内存使用和 CPU 使用将会增加,同时磁盘使用也会增加,因为在渲染过程中内存会被换出。但是,这样的系统不会对磁盘造成太多负担。
最重要的是,除非您解释正在运行的过程,否则您无法得到答案。
【讨论】: