使用线程定期更新的 Ipywidget
Ipywidget with periodic update using thread
我正在尝试定期记录滑块小部件的值。我在Asynchronous Widgets上查看了官方文档。但是对于我的代码,似乎仍然会发生阻塞。
import threading
import time
from ipywidgets import widgets
w = widgets.IntSlider()
out = widgets.Output()
def record():
for i in range(10):
time.sleep(1)
with out:
print(f"record {w.value}")
t = threading.Thread(target=record)
display(w,out)
t.start()
t.join()
我希望在拖动滑块时每秒输出滑块值。相反,它在拖动过程中只打印 0。
我也试过将两个进程都放在线程中(并使用滑块的观察方法),但效果不佳。
环境:Jupyter 实验室 3.2.1
问题来自于在代码末尾调用 join
函数。在您的线程上调用 join
会阻止您的小部件更新。我还会将您的小部件 w
和您的输出 out
作为参数传递给您的 `record 函数(如 here 中)。总的来说,代码如下所示:
import threading
import time
from ipywidgets import widgets
w = widgets.IntSlider()
out = widgets.Output()
def record(w,out):
for i in range(10):
time.sleep(1)
with out:
print(f"record {w.value}")
t = threading.Thread(target=record,args=(w,out,))
display(w,out)
t.start()
下面是一个输出示例:
record 0
record 30
record 30
record 50
record 72
record 97
record 80
record 80
record 35
record 35
我正在尝试定期记录滑块小部件的值。我在Asynchronous Widgets上查看了官方文档。但是对于我的代码,似乎仍然会发生阻塞。
import threading
import time
from ipywidgets import widgets
w = widgets.IntSlider()
out = widgets.Output()
def record():
for i in range(10):
time.sleep(1)
with out:
print(f"record {w.value}")
t = threading.Thread(target=record)
display(w,out)
t.start()
t.join()
我希望在拖动滑块时每秒输出滑块值。相反,它在拖动过程中只打印 0。
我也试过将两个进程都放在线程中(并使用滑块的观察方法),但效果不佳。
环境:Jupyter 实验室 3.2.1
问题来自于在代码末尾调用 join
函数。在您的线程上调用 join
会阻止您的小部件更新。我还会将您的小部件 w
和您的输出 out
作为参数传递给您的 `record 函数(如 here 中)。总的来说,代码如下所示:
import threading
import time
from ipywidgets import widgets
w = widgets.IntSlider()
out = widgets.Output()
def record(w,out):
for i in range(10):
time.sleep(1)
with out:
print(f"record {w.value}")
t = threading.Thread(target=record,args=(w,out,))
display(w,out)
t.start()
下面是一个输出示例:
record 0
record 30
record 30
record 50
record 72
record 97
record 80
record 80
record 35
record 35