cli/main.py 通过 @cli.result_callback() 注册 cleanup() 来调用 manager.shutdown()。Click 的 result_callback 仅在命令正常返回后触发;当命令抛出 ClickException/Abort/其它异常时不会执行,manager.shutdown() 被跳过。
cli/main.py
@cli.result_callback()
cleanup()
manager.shutdown()
result_callback
ClickException
Abort
cli/openjiuwen_runtime/cli/main.py 第 111-116 行(cleanup)、第 188 行附近
cli/openjiuwen_runtime/cli/main.py
cleanup
atexit.register
SQLAlchemyHandler.disconnect() 通过 if self.engine: await self.engine.dispose() 实现,重复调用安全。
SQLAlchemyHandler.disconnect()
if self.engine: await self.engine.dispose()
Hey @gp1000 , 感谢你对社区的贡献.
有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。
缺陷描述
cli/main.py通过@cli.result_callback()注册cleanup()来调用manager.shutdown()。Click 的result_callback仅在命令正常返回后触发;当命令抛出ClickException/Abort/其它异常时不会执行,manager.shutdown()被跳过。影响
文件位置
cli/openjiuwen_runtime/cli/main.py第 111-116 行(cleanup)、第 188 行附近修复建议
manager.shutdown()提取为幂等函数,并通过atexit.register兜底;result_callback也改为调用该幂等函数,避免重复关闭。验证
SQLAlchemyHandler.disconnect()通过if self.engine: await self.engine.dispose()实现,重复调用安全。