【问题标题】:How to get jupyter cell output to update continuously如何让jupyter单元输出不断更新
【发布时间】:2020-05-24 12:56:04
【问题描述】:

我已经在 jupyter 单元的输出中看到了几个 streamz 的案例以及简单的代码更新,但是当我自己尝试这个时,除非我运行一个循环或连续按 Ctrl-Enter 来更新,否则我只会得到一个值输出.最简单的例子就是单元格中的一行代码:

psutil.cpu_percent()

我已经看到视频和 GIF 显示输出不断更新,显然没有额外的魔法或其他特殊设置,我希望看到我在 jupyter 实验室中的单元以同样的方式更新。我究竟做错了什么?

更多背景:这始于我开始尝试复制 Matthew Rocklin 的 Streaming Dataframes 中的 streamz 示例。我尝试了以下代码:

source = Random(freq='5ms', interval='100ms')
source.x.sum()

在“Jupyter 集成和流输出”下的链接中查看页面中间的示例,您就会明白我的意思。在示例中,此代码在单元格下方生成一个不断更新的输出,但是当我尝试它时,它只提供一个值,只有在我再次运行单元格时才会更新。由于这并没有像宣传的那样工作,我尝试了我在 psutil 中看到的另一个示例,但这也不起作用。所以我认为我的 jupyter 设置一定有问题,但我不知道它可能是什么。再一次,我意识到我可以使用循环来复制这种行为,但我想了解我做错了什么以防止它像所示的那样简单地工作。

【问题讨论】:

  • 您能否更具体地说明您要更新的内容?也许您可以创建一个执行更新的无限循环。
  • 此时我只是想向自己证明,我可以在 jupyter 中获取一个单元格来输出不断更新的信息。在我看到的示例中,仅包含psutil.cpu_percent() 的单元格的输出显示了一个不断变化的值,显示了当前的 cpu 使用情况。当我尝试复制它时,输出会显示一个不会更新的静态值,除非我创建这样的循环或反复按 Ctrl-Enter。
  • psutil.readthedocs.io/en/latest/…,你可以尝试设置间隔。
  • 我通过将我的一行代码更改为psutil.cpu_percent(interval=1) 进行了尝试,但行为没有改变。

标签: python output jupyter live psutil


【解决方案1】:

我不确定您在寻找什么。 这将每秒输出 cpu 百分比。但是会阻塞你当前的内核。

import psutil

while True:
    print(psutil.cpu_percent(interval=1.))

【讨论】:

  • 真的,我只是想弄清楚为什么我不能复制我在其他地方看到的内容,即单元格输出是实时更新的,没有任何循环。我确实意识到我可以用循环来做到这一点,但是看到它在没有循环的情况下也能工作,我想知道为什么。
【解决方案2】:

所以我想我已经为自己解决了这个问题,尽管我仍然不完全确定。我的印象是 Streaming Dataframes 中的 streamz 示例运行时没有额外的小部件或代码,但后来我在 YouTube 上查看了 Matthew Rocklin - Streaming Processing with Dask,大约在 12:00 时,他引入了一个异步例程将数据推送到循环播放:

from tornado import gen
from tornado.ioloop import IOLoop

async def f():
while True:
    await gen.sleep(0.100)
    record = create_record()
    source.emit(record, asynchronous = True)

IOLoop.current().add_callback(f)

我不能声称我理解这里发生了什么,因为我仍然是 Jupyter 新手,在尝试这些示例之前对异步代码一无所知,但由于这似乎有效,我显然错过了这个关键信息问问题时。

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    相关资源
    最近更新 更多