首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OpenCPU:重用前一个会话的结果不起作用

OpenCPU:重用前一个会话的结果不起作用
EN

Stack Overflow用户
提问于 2019-06-18 01:26:21
回答 1查看 123关注 0票数 0

我想用save_iris_as_csv保存一个.csv文件。然后,调用catch_url_and_download使用save_iris_as_csv返回的会话下载此.csv文件。但是,catch_url_and_download不起作用,返回以下错误

OpenCPU error HTTP 400
cannot open URL 'http://localhost:5656/ocpu/tmp/x06c27c3ac4/files/iris.csv'

可以手动打开URL。它只是第二个R函数无法打开它。

以下是我的javascript代码。

ocpu.call("save_iris_as_csv",{},function(session){
    console.log("save_iris_as_csv is good.")
    console.log(session)
    console.log("trying to call catch_url_and_download.")
    ocpu.call("catch_url_and_download",{
        url:session.loc + "files/iris.csv"
    },function(session2){
        console.log(session2)
    }).fail(function(e){
        console.log("catch_url_and_download failed. Cannot open URL xxx.")
        alert(e.responseText)
    })
})

以下是我的R码。

save_iris_as_csv = function(){
  write.csv(iris,"iris.csv")
}
catch_url_and_download = function(url){
  download.file(url,"iris.csv")
}

我使用的是Windows操作系统。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-19 05:18:23

这里的问题是R是单线程的,因此httpuv The服务器( opencpu单用户服务器所基于的)一次只能服务于单个请求。在您的示例中,您已经创建了一个网格锁。

您的示例向一个函数发出请求,该函数随后使用download.file()向同一the服务器发出第二个请求。第二个请求由httpuv排队,当第一个请求完成时将被服务,但显然这永远不会发生,因为download.file()只会一直等待,直到它超时。

这在云服务器中不会发生,因为apache2是多线程的。

要使它与单用户服务器一起工作,您可以让第一个函数将数据保存为工作区中的对象,然后第二个函数可以通过会话密钥访问它。或者,您也可以将其保存在磁盘或数据库中,这样第二个函数就可以访问它。任何不需要到同一本地服务器的第二个http连接的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56636184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档