【问题标题】:Infinite While Loop - Memory Use?无限循环 - 内存使用?
【发布时间】:2014-09-30 04:39:46
【问题描述】:

我试图弄清楚 while 循环如何确定要使用多少内存。

在基础层面:

while True:
    pass

如果我在 PHP 中做类似的事情,它会让我的本地主机变得爬行。但在这种情况下,我希望它几乎没有使用。

那么对于 python 中的无限循环,我应该期望它会占用大量内存,还是会根据正在做什么以及在哪里进行扩展?

【问题讨论】:

    标签: python loops while-loop infinite


    【解决方案1】:

    您的无限循环是无操作的(它不执行任何操作),因此它不会增加超出程序其余部分使用的内存使用量。要回答您的问题,您需要发布您怀疑会导致内存问题的代码。

    然而,在 PHP 中,相同的循环将“挂起”,因为 Web 服务器期望将响应发送回客户端。由于没有收到响应,网络浏览器将简单地“冻结”。根据 Web 服务器的配置方式,它可能会选择结束进程并发出超时错误。

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

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


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

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

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

    2. 它正在执行一个需要很长时间的过程。

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

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

    如果它处理一堆文件,并且在此过程中,它会生成大量存储在磁盘上的输出 - 然后磁盘使用量会增加,然后在处理完成时缩小。

    如果它是一个渲染引擎,那么内存使用和 CPU 使用将会增加,同时磁盘使用也会增加,因为在渲染过程中内存会被换出。但是,这样的系统不会对磁盘​​造成太多负担。

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

    【讨论】:

    • 太棒了。我问是因为我想创建一个无限运行的程序,但我不确定如何确定它的占用空间或从系统资源中占用多少资源。
    • 我不想打破 Stackoverflow 的对话规则,但我正在玩一个可以进行一些交互的 Twitter 流媒体。最终它只会运行一整天。也许我的方法完全错了?
    猜你喜欢
    • 1970-01-01
    • 2021-03-05
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多