OpenCPU:重用上一个会话的结果不起作用
OpenCPU: Reuse results from previous session not working
我想用 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 OS.
这里的问题是 R 是单线程的,因此 httpuv 网络服务器(opencpu single-user 服务器所基于的)一次只能处理一个请求。在您的示例中,您创建了一个网格锁。
您的示例向函数发出请求,然后使用 download.file()
向 同一网络服务器 发出第二个请求。当第一个请求完成时,第二个请求被 httpuv 排队等待服务,但显然这不会发生,因为 download.file()
一直在等待,直到超时。
在云服务器中不会发生这种情况,因为 apache2 是多线程的。
要使其与单用户服务器一起工作,您可以让第一个函数将数据保存为工作区中的对象,然后第二个函数可以通过会话密钥访问它。或者您可以将它保存在磁盘或数据库或其他东西中,第二个函数可以在其中访问它。任何不需要到同一本地服务器的第二个 http 连接的东西。
我想用 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 OS.
这里的问题是 R 是单线程的,因此 httpuv 网络服务器(opencpu single-user 服务器所基于的)一次只能处理一个请求。在您的示例中,您创建了一个网格锁。
您的示例向函数发出请求,然后使用 download.file()
向 同一网络服务器 发出第二个请求。当第一个请求完成时,第二个请求被 httpuv 排队等待服务,但显然这不会发生,因为 download.file()
一直在等待,直到超时。
在云服务器中不会发生这种情况,因为 apache2 是多线程的。
要使其与单用户服务器一起工作,您可以让第一个函数将数据保存为工作区中的对象,然后第二个函数可以通过会话密钥访问它。或者您可以将它保存在磁盘或数据库或其他东西中,第二个函数可以在其中访问它。任何不需要到同一本地服务器的第二个 http 连接的东西。