Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 33 additions & 18 deletions docs/cn/open_source/open_source_api/scheduler/get_status.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,34 +64,49 @@ desc: 监控 MemOS 异步任务的生命周期,提供包括任务进度、队

## 4. 快速上手示例

使用 SDK 轮询任务状态直至完成:
当前 Python SDK 仅封装了公开的 `/get/status` 任务查询方法;调度器状态接口需要按 HTTP API 直接调用。以下示例使用 `requests` 轮询任务状态直至完成:

```python
from memos.api.client import MemOSClient
import time

client = MemOSClient(api_key="...", base_url="...")
import requests

base_url = "http://localhost:8000/product"
headers = {"Authorization": "Token ..."}
user_id = "dev_user_01"

# 1. 系统级概览:查看整个 MemOS 系统的运行健康度
global_res = client.get_all_scheduler_status()
if global_res:
print(f"系统运行概况: {global_res.data['scheduler_summary']}")
global_res = requests.get(f"{base_url}/scheduler/allstatus", headers=headers, timeout=30)
global_res.raise_for_status()
print(f"系统运行概况: {global_res.json()['data']['scheduler_summary']}")

# 2. 队列指标监控:检查特定用户的任务积压情况
queue_res = client.get_task_queue_status(user_id="dev_user_01")
if queue_res:
print(f"待处理任务数: {queue_res.data['remaining_tasks_count']}")
print(f"已下发未完成任务数: {queue_res.data['pending_tasks_count']}")
queue_res = requests.get(
f"{base_url}/scheduler/task_queue_status",
params={"user_id": user_id},
headers=headers,
timeout=30,
)
queue_res.raise_for_status()
queue_data = queue_res.json()["data"]
print(f"待处理任务数: {queue_data['remaining_tasks_count']}")
print(f"已下发未完成任务数: {queue_data['pending_tasks_count']}")

# 3. 任务进度追踪:轮询特定任务直至结束
task_id = "task_888999"
while True:
res = client.get_task_status(user_id="dev_user_01", task_id=task_id)
if res and res.code == 200:
current_status = res.data[0]['status'] # data 为状态列表
print(f"任务 {task_id} 当前状态: {current_status}")

if current_status in ['completed', 'failed', 'cancelled']:
break
status_res = requests.get(
f"{base_url}/scheduler/status",
params={"user_id": user_id, "task_id": task_id},
headers=headers,
timeout=30,
)
status_res.raise_for_status()
tasks = status_res.json()["data"]
current_status = tasks[0]["status"] if tasks else "completed"
print(f"任务 {task_id} 当前状态: {current_status}")

if current_status in ["completed", "failed", "cancelled"]:
break
time.sleep(2)
```
```
Original file line number Diff line number Diff line change
Expand Up @@ -42,36 +42,44 @@ desc: 提供阻塞等待与流式进度观测能力,确保在执行后续操

## 4. 快速上手示例

使用开源版 SDK 进行阻塞式等待
当前 Python SDK 尚未封装调度器等待接口;请按 HTTP API 直接调用

```python
from memos.api.client import MemOSClient
import json

client = MemOSClient(api_key="...", base_url="...")
import requests

base_url = "http://localhost:8000/product"
headers = {"Authorization": "Token ..."}
user_name = "dev_user_01"

# --- 场景 A:同步阻塞等待 (常用于 Python 自动化脚本) ---
print(f"正在等待用户 {user_name} 的任务队列清空...")
res = client.wait_until_idle(
user_name=user_name,
timeout_seconds=300,
poll_interval=2
res = requests.post(
f"{base_url}/scheduler/wait",
params={"user_name": user_name, "timeout_seconds": 300, "poll_interval": 2},
headers=headers,
timeout=310,
)
if res and res.code == 200:
res.raise_for_status()
if not res.json()["data"]["timed_out"]:
print("✅ 任务已全部完成。")

# --- 场景 B:流式进度观测 (常用于前端进度条渲染) ---
print("开始监听任务实时进度流...")
# 注意:SSE 接口在 SDK 中通常返回一个生成器 (Generator)
progress_stream = client.stream_scheduler_progress(
user_name=user_name,
timeout_seconds=300
progress_stream = requests.get(
f"{base_url}/scheduler/wait/stream",
params={"user_name": user_name, "timeout_seconds": 300},
headers=headers,
stream=True,
timeout=310,
)

for event in progress_stream:
# 实时打印剩余任务数
print(f"当前排队任务数: {event['remaining_tasks_count']}")
if event['status'] == 'idle':
print("🎉 调度器已空闲")
for line in progress_stream.iter_lines(decode_unicode=True):
if not line or not line.startswith("data: "):
continue
event = json.loads(line.removeprefix("data: "))
print(f"当前活跃任务数: {event['active_tasks']}")
if event["status"] in {"idle", "timeout", "error"}:
break
```
```
Loading