Skip to content

语音转写可能出现无限等待的问题 #85

@umm233

Description

@umm233

录音文件识别调用示例中,提交转写任务后,等到转写结果的方法可能出现死循环的问题。Java SDK 和Python SDK的实现方式是一样的,这里以Java为例,在com.alibaba.dashscope.api.AsynchronousApi::wait中,else逻辑处理并没有超时设置,某些异常情况下可能会无限等待,占用资源:

while (true) {
try {
DashScopeResult taskResult = client.send(req);
JsonObject output = (JsonObject) taskResult.getOutput();
String taskStatus =
output.get(TASK_STATUS) == null ? null : output.get(TASK_STATUS).getAsString();
if (TaskStatus.FAILED.getValue().equals(taskStatus)
|| TaskStatus.CANCELED.getValue().equals(taskStatus)
|| TaskStatus.UNKNOWN.getValue().equals(taskStatus)) {
return taskResult;
} else if (TaskStatus.SUCCEEDED.getValue().equals(taskStatus)) {
return taskResult;
} else {
// we start by querying once every second, and double the query interval after
// every 3(increment_steps) intervals, until we hit the max waiting interval of 5(seconds)
// TODO: investigate if we can use long-poll (server side return immediately when ready)
step += 1;
if (waitMilliseconds < maxWaitMilliseconds && step % incrementSteps == 0) {
waitMilliseconds =
waitMilliseconds * 2 > maxWaitMilliseconds
? maxWaitMilliseconds
: waitMilliseconds * 2;
}
try {
Thread.sleep(waitMilliseconds);
} catch (InterruptedException ignored) {
}
}
} catch (ApiException e) {
if (e.getStatus().getStatusCode() != HttpURLConnection.HTTP_UNAVAILABLE
&& e.getStatus().getStatusCode() != HttpURLConnection.HTTP_GATEWAY_TIMEOUT) {
throw e;
}
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions