feat: add concurrency safety, caption detection, admin enhancements, and performance improvements
This commit is contained in:
@@ -366,6 +366,38 @@ class TestSummarizeOneFlow:
|
||||
result = await summarize_one(db_session, sample_paper)
|
||||
assert result["status"] == "skipped"
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_post_processing_runs_in_thread(
|
||||
self, db_session, sample_paper, mock_pi_output, _summarize_tmp_paths
|
||||
):
|
||||
"""后处理(图片提取/ChromaDB)在工作线程而非事件循环线程执行。"""
|
||||
import threading
|
||||
|
||||
seen_threads: list[int] = []
|
||||
main_thread = threading.current_thread().ident
|
||||
|
||||
def spy_extract(arxiv_id, schema):
|
||||
seen_threads.append(threading.current_thread().ident)
|
||||
|
||||
with (
|
||||
patch("app.services.summarizer.download_pdf", new_callable=AsyncMock),
|
||||
patch(
|
||||
"app.services.summary_generator.call_pi",
|
||||
new_callable=AsyncMock,
|
||||
return_value=(mock_pi_output, "test-session-id"),
|
||||
),
|
||||
patch(
|
||||
"app.services.summary_persister._maybe_extract_images",
|
||||
side_effect=spy_extract,
|
||||
),
|
||||
patch("app.services.summary_persister._maybe_index_chroma"),
|
||||
):
|
||||
result = await summarize_one(db_session, sample_paper)
|
||||
|
||||
assert result["status"] == "done"
|
||||
assert seen_threads, "后处理未被调用"
|
||||
assert seen_threads[0] != main_thread, "后处理应在工作线程执行,不阻塞事件循环"
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════
|
||||
# 批量操作测试
|
||||
|
||||
Reference in New Issue
Block a user