@await_on_shutdown 对在客户端上下文中调用的处理程序(on_connect、on_click、ui.timer)没有任何影响
第一次检查
- 我在这里增加了一个非常描述性的标题。
- 这不是一个安全问题。
- 这不是一个QQA。 我相信NiceGUI及其文件有问题。
- 我用GitHub搜索 找到一个类似的问题,然后空出。
示例代码
导入 Ayncio
从 pathlib 导入路径
从 nicegui 导入应用程序、 背景任务、 ui
Out = 路径('s hutdown probe.txt')
Out.unlink( missing ok=True) (英语).
@ background tasks.await on shutdown (英语).
async def 保存( tag: str) - > 无:
等待Ayncio.sleep(3)# 当火力下方关闭时仍在飞行
以 Out. open ('a') 作为 f :
f. write( tag + “\n” )
async def stop soon () - > 无:
等待 Ayncio.sleep(2) 页面存档备份,存于互联网档案馆
app.shutdown () () 应用
app.on startup(lambda: 保存 ('on startup'))#作品
app.on connect(lambda: 保存 ('on connect')) #已断开
app.on 启动( stop soon)
ui. label ('打开一页, 然后等待几秒钟')
ui.run( 重装为假)说明
{background task.await on shutdown> 被记录为 *'Tag a async 函数,所以从它所创建的任务不会在关闭时被取消". 这适用于`app.on startup',但不适用于在客户情况下援引的处理者——不管怎样,这些处理者在关闭时被悄悄地取消。
运行上面的片段,让页面加载一次,等待自动关闭. `shutdown probe.txt'应包含两行。 实际产出:
启动( S)连接 ' 缺失。 两人都经历了同一个装饰;只有没有通过客户背景的装饰幸存了下来. 这里的启动 ' 是控制——它证明关闭确实等待受保护的工作,所以区别不是宽限期。
我测量了三个受影响的入口,所有入口仍然被取消:
输入点 发送路径 |-|-|-. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'ui.timer(0.01,处理器,一次=True)' 'timer' |
机制
`背景 任务.create () 以身份承认受保护的工作:
https://GitHub.com/zauberzeug/nicegui/blob/main/nicegui/background tasks.py#L47 (中文(简体) ).
每一条上下文保存的发送路径在拨打creat ()'之前,将待发件包裹在**新的皮层中,以便sintance ' 检查不再匹配:
nicegui/client.py:455'和:482'-`helpers.await with context(结果.)'- `nicegui/events.py:486'----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
nicegui/timer.py:45'-coroutine ()'
App.safe invoke' (nicegui/app/app.py:110')直接通过结果',这就是在 启动'是起作用的原因。
这不是倒退,我查过了,还等着呢。 `#5879"用"safe invoke"用共享的"await---context"帮助器来取而代之的手卷"async def result 用 client ()"包装",但旧代码也将可等待者包裹了,所以标记已经被隐藏了. 其行为可追溯到 " wait-on-shutdown " 和 " safe-invoke " ,并在 " v3.16.0 " 上复制。 . . . . . . .
内容来源: zauberzeug/nicegui