笔记

AstrBot / Async / Images

限制 ImgFlow 后台任务数量

一则关于限制后台图像任务、明确记录取消状态,并把本地文件操作移出事件循环的维护笔记。

现象

后台图像请求的进入速度可能高于完成速度,而取消操作和阻塞文件处理此前都依赖较通用的失败分支。运行边界因此不够清楚:待处理任务可能持续增加,取消状态容易与普通错误混在一起,本地图像读取或结果写入也可能占用事件循环。

处理方式

插件会在创建新任务前检查可配置的后台任务上限。活动任务达到限制后,新请求会被拒绝,并记录 background.rejected 审计事件。执行协程捕获 asyncio.CancelledError 后,会写入 cancelled 状态与回调结果,再继续抛出取消异常。本地图像读取、输入解析、步骤图保存和结果保存则通过统一的 asyncio.to_thread() 辅助函数执行。

验证

针对性测试先填满可用后台任务槽位,再确认下一个请求会在任务创建前被拒绝。取消测试同时检查保存状态和回调内容。文件操作测试替换线程辅助函数,确认本地读取与流程保存都经过该函数。验证范围对应可配置的后台任务边界,并未把它描述为所有执行器共用的全局限制。