fix: order/goods 限速收紧至峰值<3次/秒(340ms+0~160ms随机间隔) #12

Merged
inkreach merged 2 commits from inkreach/order-goods-throttle AGit into main 2026-10-23 11:14:11 +00:00
2 changed files with 21 additions and 1 deletions
Showing only changes of commit eb97ee1647 - Show all commits
+19 -1
View File
@@ -8,6 +8,7 @@
from __future__ import annotations
import json
import threading
import time
from datetime import datetime, timedelta, timezone
from typing import Any, Callable, TypeVar
@@ -21,7 +22,8 @@ from flows.shared.mappers import map_sds_channel_type
T = TypeVar("T")
GOODS_CONCURRENCY = 20
GOODS_CONCURRENCY = 5
GOODS_MIN_INTERVAL_MS = 150 # 相邻两次 order/goods 调用全局最小间隔(峰值 ≤ ~6.7 次/秒)
PAGE_DELAY_MS = 500
MAX_RETRIES = 3
RETRY_DELAY_MS = 3000
@@ -144,8 +146,24 @@ def fetch_sds_all_pages(client: SdsMngClient, params: dict[str, Any]) -> list[An
# ---------- RIIN 商品 ----------
# 全局限速:RIIN 分销侧反馈 distribution/order/goods 逐单调用对其服务器压力过大,
# 所有线程共享节拍,相邻两次调用至少间隔 GOODS_MIN_INTERVAL_MS。
_goods_pace_lock = threading.Lock()
_goods_last_call_at = 0.0
def _pace_goods_call() -> None:
global _goods_last_call_at
with _goods_pace_lock:
wait = _goods_last_call_at + GOODS_MIN_INTERVAL_MS / 1000 - time.monotonic()
if wait > 0:
time.sleep(wait)
_goods_last_call_at = time.monotonic()
def fetch_goods_for_order(client: RiinDisClient, order_id: str) -> list[Any]:
try:
_pace_goods_call()
resp = client.get_order_goods(order_id)
return list(resp.data)
except Exception as err: # noqa: BLE001
+2
View File
@@ -21,6 +21,7 @@ deployments:
schedules:
- cron: 30 * * * *
timezone: Asia/Shanghai
active: false # 暂停:每小时重拉近7天全部订单商品,对 RIIN distribution/order/goods 调用量过大(增量/刷新未完结/日报核验已覆盖)
work_pool:
name: inkreach-pool
- name: riin-refresh-pending
@@ -39,6 +40,7 @@ deployments:
schedules:
- cron: 0 6 * * *
timezone: Asia/Shanghai
active: false # 暂停:与 daily-report 18:30 的核验子流程重复,保留日报一处即可
work_pool:
name: inkreach-pool
- name: sds-order-sync