API异步任务轮询计算引擎·专业版

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

面向后端开发者的 API 异步任务轮询计算引擎(专业版)。提供 AsyncJob 类管理 PENDING→RUNNING→SUCCEEDED/FAILED 状态机并生成对应 HTTP 响应;提供 next_poll_interval/poll_schedule 计算指数退避轮询间隔(含上限)、elapsed_at 计算累计等待、should_timeout 判定总超时,幂等键防重复提交。对非法参数与矛盾配置(上限小于初始间隔)做确定性兜底。商品类技能,附 3 正例 + 1 边界测试全部实跑通过;只需设计概念与检查清单可用免费版 zsai-api-async-job-free。

一句话选型结论

按资料字段整理

API异步任务轮询计算引擎·专业版是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_9f56358d/zsai-api-async-job-pro
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_9f56358d仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量5.1 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
API异步任务轮询计算引擎·专业版当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

5.1 KB
模型实际读到的说明书原文,来自技能仓库

API 异步任务轮询计算引擎(专业版)

输入 / 输出

输入:job_id、幂等键、初始/当前状态;退避参数(base、factor、max_interval)、
当前轮询次数、任务开始与当前时间、最大等待。
输出:下次轮询间隔、累计等待、是否超时、当前状态与 HTTP 响应(状态码/body)。

使用示例

from async_job import AsyncJob, next_poll_interval, should_timeout, RUNNING, SUCCEEDED

job = AsyncJob(job_id="j1", idem_key="k-123")
job.transition(RUNNING)
# 客户端第 attempt 次轮询前:
wait = next_poll_interval(attempt, base=1, factor=2, max_interval=30)
if should_timeout(started_at, now, max_wait=60):
    ...  # 停止并提示超时
job.transition(SUCCEEDED, result={"url": "..."})
status_code, body, _ = job.http_response()

引擎代码:async_job.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""API 异步任务轮询计算引擎(专业版核心)
长耗时操作:提交 -> 202 + job_id/status_url -> 客户端指数退避轮询,
状态机 PENDING -> RUNNING -> SUCCEEDED / FAILED;含总超时与重复提交防护。
"""

PENDING, RUNNING, SUCCEEDED, FAILED = "PENDING", "RUNNING", "SUCCEEDED", "FAILED"
TERMINAL = (SUCCEEDED, FAILED)


class AsyncJob:
    def __init__(self, job_id, idem_key=None, status=PENDING, result=None, error=None):
        self.job_id = job_id
        self.idem_key = idem_key
        self.status = status
        self.result = result
        self.error = error

    def transition(self, new_status, result=None, error=None):
        # 合法流转:PENDING->RUNNING->SUCCEEDED/FAILED;终态不可再变
        order = {PENDING: 0, RUNNING: 1, SUCCEEDED: 2, FAILED: 2}
        if self.status in TERMINAL:
            return self.status
        if order.get(new_status, -1) >= order[self.status]:
            self.status = new_status
            if result is not None:
                self.result = result
            if error is not None:
                self.error = error
        return self.status

    def http_response(self):
        """返回 (http_status, body, retry_after)"""
        if self.status in (PENDING, RUNNING):
            return 200 if self.status == RUNNING else 202, {
                "job_id": self.job_id, "status": self.status}, None
        if self.status == SUCCEEDED:
            return 200, {"job_id": self.job_id, "status": SUCCEEDED, "result": self.result}, None
        return 200, {"job_id": self.job_id, "status": FAILED, "error": self.error}, None


def next_poll_interval(attempt, base=1.0, factor=2.0, max_interval=30.0):
    """指数退避:base*factor^attempt,封顶 max_interval;非法入参兜底为 base"""
    if base <= 0 or factor <= 0:
        base = 1.0; factor = 2.0
    interval = base * (factor ** max(attempt, 0))
    # max_interval 为所有轮询间隔的硬上限;配置矛盾(max<base)时以硬上限为准
    if max_interval <= 0:
        max_interval = base
    return min(interval, max_interval)


def poll_schedule(attempts, base=1.0, factor=2.0, max_interval=30.0):
    """生成各次轮询间隔序列"""
    return [next_poll_interval(a, base, factor, max_interval) for a in range(attempts)]


def elapsed_at(attempt, base=1.0, factor=2.0, max_interval=30.0):
    """到第 attempt 次轮询前的累计等待秒数"""
    return sum(poll_schedule(attempt, base, factor, max_interval))


def should_timeout(started_at, now, max_wait):
    """总等待是否超时"""
    return (now - started_at) >= max_wait

测试(3 正例 + 1 边界,实跑全过)

用例 断言
正例1 退避序列 1,2,4,8,封顶 10
正例2 累计等待可计算;超 max_wait 判定超时、未超不超时
正例3 PENDING→RUNNING→SUCCEEDED 带结果(200);终态不可再变;FAILED 带 error
边界 attempt≤0 按 base 兜底;max_interval<base 时不超过硬上限;非法参数兜底

硬性规则

  1. 提交快速返回 202,与轮询分离,不做长同步等待。
  2. 轮询指数退避、间隔有硬上限、整体有总超时,避免空转。
  3. 幂等键防重复任务;终态结果可重复查询、不再变更。
  4. 服务端任务需有执行超时与清理,防止永久悬挂。

常见问题

5 问
答案由本站依据条目字段整理
API异步任务轮询计算引擎·专业版怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_9f56358d/zsai-api-async-job-pro。安装方式为未标注。装完刷新技能列表或重开客户端。

API异步任务轮询计算引擎·专业版支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

API异步任务轮询计算引擎·专业版权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

API异步任务轮询计算引擎·专业版收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

API异步任务轮询计算引擎·专业版用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。