You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用OpenCPU长耗时函数未获取到sessionid,求排查解决

OpenCPU异步调用未返回SessionID问题排查

问题描述

在OpenCPU上部署了一个耗时约1小时的长运行函数,预期通过async=true参数触发异步执行并获取sessionid用于后续轮询,但调用后响应中未包含会话相关信息。

代码片段

let uri= "http://IP/ocpu/library/mypackage/R/myfunction/json"

const formData = {
  'param1' : 'value1',
  'param2' : 'value2',
  'file1': fs.createReadStream('files/.....'),
  'file2': fs.createReadStream('files/...'),
  'file3': fs.createReadStream('files/....')
};

const response = await request.post({
  uri: url,
  formData: formData,
  headers: { 'Content-Type': 'multipart/form-data' }
  qs: { async: true }
});

console.log(response);

收到的响应

{"uri":{"protocol":"http:","slashes":true,"auth":null,"host":"..myIP..","port":80,"hostname":"MYIP","hash":null,"search":null,"query":null,"pathname":"/ocpu/library/mypackage/R/myfunction/json","path":"/ocpu/library/..../R/...../json","href":"http://MYIP/ocpu/library/mypackage/R/myfunction/json"},"method":"POST","headers":{"Content-Type":"multipart/form-data","host":"MYIP"}}

错误点及修复方案

  • 变量名不匹配:定义的请求地址变量是uri,但请求配置里写的是url,导致请求地址未正确传递。修复为:

    uri: uri,
    
  • 语法错误导致async=true未生效:headers配置项末尾缺少逗号,导致qs参数未被正确解析,OpenCPU没接收到异步执行指令,自然不会返回sessionid。修复后配置:

    const response = await request.post({
      uri: uri,
      formData: formData,
      headers: { 'Content-Type': 'multipart/form-data' }, // 添加逗号
      qs: { async: true }
    });
    
  • 响应获取方式错误:当前打印的是整个request响应对象的元数据,而非OpenCPU返回的实际内容。需要获取响应的body部分:

    console.log(response.body);
    

    异步执行成功时,OpenCPU会返回类似/ocpu/tmp/x0123456789abcdef/的session路径,你可以用这个路径拼接轮询地址(比如http://IP/ocpu/tmp/x0123456789abcdef/R/.val/json)获取执行结果。

额外注意事项

  • 确认OpenCPU服务器配置允许异步长运行任务,检查服务器超时设置是否能覆盖1小时的执行时间。
  • 验证fs.createReadStream的文件路径是否正确,确保文件能被正常读取,避免因文件问题导致请求失败。

内容的提问来源于stack exchange,提问作者geeky_monster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:35:17