无限While循环-内存使用



我想弄清楚一个while循环如何决定使用多少内存。

基本级别:

while True:
    pass

如果我在PHP中做类似的事情,它将使我的本地主机陷入爬行状态。但是在这种情况下,我希望它几乎不使用。

那么对于python中的无限循环,我应该期望它会消耗大量的内存,还是它会根据正在做的事情和在哪里进行扩展?

你的无限循环是一个no-op(它不做任何事情),所以它不会增加内存使用,超出了你的程序的其余部分所使用的内存。要回答您的问题,您需要发布您怀疑导致内存问题的代码。

然而,在PHP中,同样的循环将"挂起",因为web服务器正在等待响应发送回客户端。由于没有收到响应,web浏览器将简单地"冻结"。根据web服务器的配置方式,它可能会选择在出现超时错误时结束进程。

你也可以这样做,如果你使用Python和web框架,并在你的一个方法中放入一个无限循环,返回一个响应给客户端。

如果您从shell中运行等效的PHP代码,它将具有与用Python(或任何其他语言)编写相同的效果。也就是说,您的控制台将阻塞,直到您终止该进程。


我问是因为我想创建一个无限运行的程序,但我不知道如何确定它的足迹或它会有多少从系统资源中获取。

一个无限期运行的程序(我想这就是你的意思)——它通常有两种情况:

  1. 它等待在触发器上做一些工作(就像web服务器无限期地运行,但它只是坐在那里,直到有人访问你的网站)

对于#2,您需要通过弄清楚正在完成的工作来确定资源使用情况。

如果要构建一个大的项目列表来进行一些计算/排序,那么内存使用将随着列表的增长而增长。

如果它正在处理一堆文件,并且在这个过程中,它生成了大量存储在磁盘上的输出-那么磁盘使用将会增长,然后在处理完成后收缩。

如果它是一个渲染引擎,那么内存使用和CPU使用将增加,以及磁盘使用,因为在渲染期间内存被交换。但是,这样的系统不会对磁盘造成太大的负担。

最重要的是,除非您解释正在运行的流程,否则您无法得到这个问题的答案。

最新更新