Skip to content

perf: skip disabled submission log formatting - #64

Merged
XiaoCow666 merged 1 commit into
XiaoCow666:mainfrom
ggboyxkw666:fix/submission-observability-overhead
Sep 19, 2026
Merged

XiaoCow666 merged 1 commit into
XiaoCow666:mainfrom
ggboyxkw666:fix/submission-observability-overhead

Conversation

@ggboyxkw666

@ggboyxkw666 ggboyxkw666 commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

变更摘要

在 tasks/submission_tasks.py 的提交评测日志辅助函数中,先检查目标日志级别是否启用;关闭时直接返回,避免无效的耗时计算、字段拼接和日志调用。日志级别启用时保持原有输出格式和字段。

测量对象

测量的是一次 _log_submission_evaluation_event(...) 调用在日志级别关闭时的辅助函数开销,不是整条 HTTP 请求、RQ 作业或评测耗时。

固定条件:

  • Python 3.12.14 隔离环境
  • timeit -n 10000 -r 7
  • tasks.submission_tasks.logger 设置为 CRITICAL
  • 调用参数固定为 event='finished'、submission_id=1、state='evaluated'、sandbox_status='none'
  • 基线和改动后使用完全相同的命令

基线

命令:

& 'C:\Users\1\AppData\Local\Temp\codesense-test-20260918\Scripts\python.exe' -m timeit -n 10000 -r 7 -s "import logging; import tasks.submission_tasks as m; m.logger.setLevel(logging.CRITICAL)" "m._log_submission_evaluation_event('finished', 1, 0.0, state='evaluated', sandbox_status='none')"

结果:10000 loops, best of 7: 1.26 usec per loop。

改动后

同一命令结果:10000 loops, best of 7: 452 nsec per loop。

在这个关闭日志级别的微基准中,单次调用耗时约降低 64%(约 1.26 usec 降到 0.452 usec)。这个数字只说明日志辅助函数的局部开销,不能外推为整条评测链路或用户请求快了 64%。

输出兼容性验证

命令:

& 'C:\Users\1\AppData\Local\Temp\codesense-test-20260918\Scripts\python.exe' -m pytest -q tests/test_submission_worker.py::test_formal_worker_updates_submission_in_isolated_database --log-cli-level=INFO

结果:1 passed, 20 warnings。

实际输出仍包含:

submission_evaluation event=started submission_id=1 elapsed_ms=0
submission_evaluation event=finished submission_id=1 elapsed_ms=63 state=evaluated sandbox_status=none

回归验证

& 'C:\Users\1\AppData\Local\Temp\codesense-test-20260918\Scripts\python.exe' -m pytest -q tests/test_submission_worker.py

结果:6 passed, 23 warnings。

另外:

  • python -m compileall -q tasks/submission_tasks.py:通过
  • git diff --check:通过

范围和未优化部分

本 PR 只改变日志级别关闭时的辅助函数开销,不改变评测状态、分数、反馈、数据库写回、RQ 调度、C++ 沙箱、AI 调用或日志启用时的输出。

没有优化:

  • AI provider 调用和网络等待
  • C++ 编译、运行和输出收集
  • Redis/RQ 调度
  • SQL 查询和统计刷新
  • Flask 请求整体耗时
  • 生产环境端到端吞吐和内存占用

这些未在本次微基准中验证,也没有提交生产配置或凭据。

@XiaoCow666 XiaoCow666 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CodeSense 自动评审

未发现会导致错误结果、回归或无法运行的阻塞问题;该变更在日志级别未启用时提前返回,能够避免不必要的格式化。

已有验证信息

  • 事件仅提供了 tasks/submission_tasks.py 的 diff,未提供自动化检查或测试运行结果。

评审事件:47629600-b42c-11f1-9608-4f0a91c4dea6

@XiaoCow666
XiaoCow666 merged commit b3f0dbb into XiaoCow666:main Sep 19, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants