perf(infra): NAS CPU 중기 2건 + 1건 보류 (CHECK_POINT 🟡)
#6 insta-lab Chromium Browser Pool — Playwright/Chromium 인스턴스를 모듈 레벨에서 보관하고 매 슬레이트마다 reuse. 카드 10장 렌더의 launch 비용 (~3초/회)이 사라짐. startup/shutdown lifecycle hook 추가. crashed/disconnected 시 lazy 재초기화. #8 realestate-lab 수집 병렬화 — collect_all과 delete_old_completed가 서로 다른 데이터 영역이라 ThreadPoolExecutor(2)로 병렬. asyncio.gather 대신 thread executor를 쓴 이유는 BackgroundScheduler+동기 함수 환경 에서 자연스럽고 추가 의존성 없기 때문. 매칭은 일관성 유지로 순차. #7 stock async — 보류. 재진단 결과 stock은 BackgroundScheduler 사용 중이라 main loop 블로킹 없음. fetch 4회는 network I/O wait가 대부분이라 to_thread도 의미 없음. 진짜 효과를 보려면 AsyncIOScheduler 전환 + aiohttp 병렬이라 큰 리팩토링. 박재오 판단 대기. CHECK_POINT.md 갱신. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import os
|
||||
import logging
|
||||
import threading
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from contextlib import asynccontextmanager
|
||||
from fastapi import BackgroundTasks, FastAPI, Query, HTTPException
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
@@ -26,10 +27,19 @@ scheduler = BackgroundScheduler(timezone=os.getenv("TZ", "Asia/Seoul"))
|
||||
|
||||
|
||||
def scheduled_collect():
|
||||
"""매일 09:00 — 수집 + 정리 + 매칭 + 알림 push"""
|
||||
"""매일 09:15 — 수집 + 정리 (병렬) → 매칭 → 알림 push.
|
||||
|
||||
collect_all과 delete_old_completed_announcements는 서로 다른 데이터
|
||||
영역을 건드리므로 thread 둘로 병렬화. 매칭은 두 작업 완료 후 순차
|
||||
실행 (DB 일관성). CHECK_POINT 중기-8 — env이 BackgroundScheduler+
|
||||
동기 함수 조합이라 asyncio.gather 대신 ThreadPoolExecutor 사용.
|
||||
"""
|
||||
logger.info("스케줄 수집 시작")
|
||||
collect_all()
|
||||
deleted = delete_old_completed_announcements(grace_days=90)
|
||||
with ThreadPoolExecutor(max_workers=2) as ex:
|
||||
collect_future = ex.submit(collect_all)
|
||||
delete_future = ex.submit(delete_old_completed_announcements, 90)
|
||||
collect_future.result()
|
||||
deleted = delete_future.result()
|
||||
if deleted:
|
||||
logger.info("정리: %d건 삭제", deleted)
|
||||
run_matching()
|
||||
|
||||
Reference in New Issue
Block a user