mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-11 11:49:50 +08:00
refactor: 引入 safe_create_task 防止后台任务被 GC 回收,降低默认连接池和 worker 数量
- 新增 safe_create_task 统一替代裸 asyncio.create_task,通过全局集合持有 task 引用 - 默认 worker 数量从 4 降为 1,HTTP 连接池总预算从 800 降为 200 - 为 health_cache 和 affinity_manager 内存缓存增加上限淘汰机制 - MemoryCachePlugin 支持延迟启动清理任务 - gunicorn when_ready 增加 gc.collect() 并记录 post_worker_init RSS
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
提供在异步上下文中安全执行同步函数的工具,避免阻塞事件循环。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from collections.abc import Callable, Coroutine
|
||||
from functools import partial, wraps
|
||||
@@ -11,6 +13,28 @@ from typing import Any, TypeVar
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
# 全局 task 引用集合,防止 fire-and-forget task 被 GC 回收
|
||||
_background_tasks: set[asyncio.Task[Any]] = set()
|
||||
|
||||
|
||||
def safe_create_task(coro: Coroutine[Any, Any, Any]) -> asyncio.Task[Any] | None:
|
||||
"""创建后台 task 并持有引用,防止被 GC 回收。
|
||||
|
||||
用于 fire-and-forget 场景(如缓存失效、异步指标上报等),
|
||||
替代裸 ``asyncio.create_task()`` 调用。
|
||||
|
||||
Returns:
|
||||
创建的 Task 对象;若没有运行中的事件循环则返回 None。
|
||||
"""
|
||||
try:
|
||||
loop = asyncio.get_running_loop()
|
||||
except RuntimeError:
|
||||
return None
|
||||
task = loop.create_task(coro)
|
||||
_background_tasks.add(task)
|
||||
task.add_done_callback(_background_tasks.discard)
|
||||
return task
|
||||
|
||||
|
||||
async def run_in_executor(func: Callable[..., T], *args: Any, **kwargs: Any) -> T:
|
||||
"""
|
||||
|
||||
+3
-6
@@ -1,6 +1,5 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import random
|
||||
import time
|
||||
from typing import Any
|
||||
@@ -131,8 +130,6 @@ class PerfRecorder:
|
||||
|
||||
@staticmethod
|
||||
def _create_task(coro: Any) -> None:
|
||||
try:
|
||||
loop = asyncio.get_running_loop()
|
||||
except RuntimeError:
|
||||
return
|
||||
loop.create_task(coro)
|
||||
from src.utils.async_utils import safe_create_task
|
||||
|
||||
safe_create_task(coro)
|
||||
|
||||
Reference in New Issue
Block a user