资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

错误缓解方案

重试机制介绍

为最大限度地减少服务出现问题后带来的影响,平台提供了重试机制,在调用错误时进行重试等,避免出现频率极高的错误,以保障服务稳定性和为开发者提供最佳性能和较优的开发体验。

SDK 提供了多种方式,在遇到错误时自动进行重试,以及在重试间进行退避避免触发流控。

基于指数回避重试机制,重试的等待时间会以某种策略化的计算,以规避请求风暴等问题,更多详细介绍请参考退避回避算法。简单可以总结为:

重试等待时间=min(backoff_factor×(2^重试次数)+random(0, jitter), max_wait_interval)

  • retry_count:重试次数。
  • backoff_factor:退避因子。
  • jitter:抖动系数,对退避时间做一个“抖动”,以具有一定的随机性。
  • max_wait_interval:最大重试间隔,以避免无限长的等待时间。
  • timeout:本次请求超时时间(秒)。

如何实现重试

目前支持2种方式,分别通过环境变量设置、通过参数进行设置。不同方式实现效果相同,设置方式及参数名不同,具体使用参考示例,开发者可以选择任一方式。

  • 方式一:通过环境变量设置

环境变量设置对整个程序生效。

说明 设置环境变量项
超时时间(秒) QIANFAN_CONSOLE_API_RETRY_TIMEOUT
重试次数 QIANFAN_CONSOLE_API_RETRY_COUNT
退避因子 QIANFAN_CONSOLE_API_RETRY_BACKOFF_FACTOR
抖动系数 QIANFAN_CONSOLE_API_RETRY_JITTER
最大重试间隔 QIANFAN_CONSOLE_API_RETRY_MAX_WAIT_INTERVAL

以调用获取预置服务列表为例说明。

import os
from qianfan import resources

## 超时时间(秒)
os.environ["QIANFAN_CONSOLE_API_RETRY_TIMEOUT"] = "60"
## 重试次数
os.environ["QIANFAN_CONSOLE_API_RETRY_COUNT"] = "3"
## 退避因子
os.environ["QIANFAN_CONSOLE_API_RETRY_BACKOFF_FACTOR"] = "1"
## 抖动系数
os.environ["QIANFAN_CONSOLE_API_RETRY_JITTER"] = "1"
## 最大重试间隔
os.environ["QIANFAN_CONSOLE_API_RETRY_MAX_WAIT_INTERVAL"] = "120"

# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"

resp = resources.Service.V2.describe_preset_services(
    service_ids=['svcp-xxx']
)

print(resp.body)
  • 方式二:通过参数设置

参数设置仅对该请求生效。

说明 参数名称 类型
超时时间(秒) request_timeout float
重试次数 retry_count int
退避因子 backoff_factor float
抖动系数 retry_jitter float
最大重试间隔 max_wait_interval float

以调用获取预置服务列表为例说明。

import os
from qianfan import resources

# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"

resp = resources.Service.V2.describe_preset_services(
    service_ids=['svcp-xxx'],
    # 重试次数
    retry_count=3,
    # 超时时间(秒)
    request_timeout=300,
    # 退避因子
    backoff_factor=1,
    # 抖动系数
    retry_jitter=1,
    # 最大重试间隔
    max_wait_interval=120
)

print(resp.body)
上一篇
错误码
下一篇
鉴权认证