使用 ipyvuetify/voila,我试图在加载器按钮单击事件处理程序中启动一个长的 I/O 绑定任务(for 循环中的一系列请求),并提供一个取消按钮来中断 for 循环。
不幸的是,取消按钮处理程序没有预期的效果,取消事件只有在加载程序处理程序完成后才会启动。
如何做到这一点?帮助表示赞赏。
这是我的实现:
from time import sleep
import ipyvuetify as v
cancel_flag = False
def long_process(secs):
print("long process started...")
for _ in range(secs): # some long process
sleep(1)
if cancel_flag:
break
print("long process finished...")
return 42
def toggleLoading():
loader_btn.loading = not loader_btn.loading
loader_btn.disabled = loader_btn.loading
def on_loader_click(*args):
global cancel_flag
cancel_flag = False
toggleLoading()
result = long_process(secs=5)
toggleLoading()
def on_cancel_click(*args):
global cancel_flag
cancel_flag = True
if loader_btn.disabled:
toggleLoading()
loader_btn = v.Btn(loading=False, color="primary", children=["loader"])
loader_btn.on_event("click", on_loader_click)
cancel_btn = v.Btn(loading=False, color="red", children=["cancel"])
cancel_btn.on_event("click", on_cancel_click)
v.Layout(children=[loader_btn, cancel_btn])