我正在尝试从线程中清除ipwidget输出
例如,我想创建一个计数为10的计数器,在线程中运行,并且只显示当前数字。
代码
import ipywidgets as widgets
import time
from IPython.display import display, HTML
from concurrent.futures import ThreadPoolExecutor
output = widgets.Output()
display(output)
def my_foo():
for count in range(10):
output.clear_output(wait=True)
output.append_display_data(HTML(f"count {count}"))
time.sleep(1)
with ThreadPoolExecutor() as executor:
executor.submit(my_foo)
所需输出
上述代码的最终输出应该只是
count 9
实际输出
count 0
count 1
count 2
count 3
count 4
count 5
count 6
count 7
count 8
count 9
根据文档,您似乎使用了正确的调用。
避免意外的最佳方法是永远不要在多个线程生成输出的上下文中使用输出小部件的上下文管理器。
但是,我在后台线程中遇到了同样的问题。我确实手动将输出设置为一个空列表,该列表似乎有效(尽管我不确定它是否干扰了ipywidgets
跟踪更新的内部状态(:
output.outputs = [] # instead of output.clear_output()