【问题标题】:update widget from process in jupyter notebook从 jupyter 笔记本中的进程更新小部件
【发布时间】:2020-07-15 15:10:02
【问题描述】:

类似question

创建一个浮动进度小部件并在另一个进程中更新它, 为什么添加打印语句会更新进度条? 没有 print 语句可以做到这一点吗?

Jupyter 版本:5.3

import sys; sys.version 

'3.7.3(默认,2019 年 3 月 27 日,22:11:17)\n[GCC 7.3.0]'

import multiprocessing as mp
from IPython.display import display
import ipywidgets as widgets
import time
progress = widgets.FloatProgress(value=0.0, min=0.0, max=1.0)

def work(progress):
    total = 100
    for i in range(total):
        print(i)
        time.sleep(0.2)
        progress.value = float(i+1)/total

p = mp.Process(target = work, args=(progress,))
display(progress)
p.start()

【问题讨论】:

  • progress.value = float(i+1)/total是更新进度条的部分,print语句对进度条没有影响。
  • 如果没有打印语句,进度小部件不会改变(work() 在不同的进程中运行)
  • 你说的很对!道歉。

标签: python jupyter-notebook multiprocessing jupyter ipywidgets


【解决方案1】:

您是否查看过tqdm 模块?它几乎完全符合您的要求,并且有一个 jupyter notebook 扩展:

例如:

from tqdm.notebook import tqdm
for i in tqdm(range(100)):
    pass

打印这个漂亮的进度条,每次迭代都会更新:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2023-02-05
    • 1970-01-01
    相关资源
    最近更新 更多