- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我用 Java 编写了一个 servlet 代码,用于从存储在 Google Cloud Storage 中的文件中读取一行。阅读每一行后,我将其传递给 prediction API 。一旦我得到通过的文本的预测。我将它附加到原始行并将其存储在 Google 云存储中的其他文件中。
此源文件是一个 csv 文件,包含 10,000 多条记录。因为我是单独解析它,所以将它传递给预测 API,然后存储回 Cloud Storage。这样做需要很多时间。由于 App Engine 有 30 个部分的限制,任务队列也有限制。任何人都可以建议我一些选择吗?由于重新启动程序不是一种选择,因为我无法从我停止的地方启动预测。
这是我的代码:
@SuppressWarnings("serial")
public class PredictionWebAppServlet extends HttpServlet {
private static final String APPLICATION_NAME = "span-test-app";
static final String MODEL_ID = "span-senti";
static final String STORAGE_DATA_LOCATION = "/bigdata/training_set/";
private static HttpTransport httpTransport;
private static final JsonFactory JSON_FACTORY = JacksonFactory
.getDefaultInstance();
public static final String INPUT_BUCKETNAME = "bigdata";
public static final String INPUT_FILENAME = "abc.csv";
public static final String OUTPUT_BUCKETNAME = "bigdata";
public static final String OUTPUT_FILENAME = "def.csv";
private static Credential authorize() throws Exception {
Credential cr = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(
"878482284233-aacp8vd5297aqak7v5r0f507qr63mab4@developer.gserviceaccount.com")
.setServiceAccountScopes(
Collections.singleton(PredictionScopes.PREDICTION))
.setServiceAccountPrivateKeyFromP12File(
new File(
"28617ba6faac0a51eb2208edba85d2e20e6081b4-privatekey.p12"))
.build();
return cr;
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
try {
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
Credential credential = authorize();
Prediction prediction = new Prediction.Builder(httpTransport,
JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME)
.build();
GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename filename = new GcsFilename(INPUT_BUCKETNAME, INPUT_FILENAME);
GcsFilename filename1 = new GcsFilename(OUTPUT_BUCKETNAME,
OUTPUT_FILENAME);
GcsFileOptions options = new GcsFileOptions.Builder()
.mimeType("text/html").acl("public-read")
.addUserMetadata("myfield1", "my field value").build();
GcsOutputChannel writeChannel = gcsService.createOrReplace(filename1, options);
PrintWriter writer = new PrintWriter(Channels.newWriter(writeChannel,
"UTF8"));
GcsInputChannel readChannel = null;
BufferedReader reader = null;
readChannel = gcsService.openReadChannel(filename, 0);
reader = new BufferedReader(Channels.newReader(readChannel, "UTF8"));
String line;
String cvsSplitBy = ",";
String temp_record = "";
Input input = new Input();
InputInput inputInput = new InputInput();
while ((line = reader.readLine()) != null) {
String[] post = line.split(cvsSplitBy);
inputInput.setCsvInstance(Collections
.<Object> singletonList(post[1]));
input.setInput(inputInput);
Output output = prediction.trainedmodels()
.predict("878482284233", MODEL_ID, input).execute();
for (int i = 0; i < 10; i++) {
temp_record = temp_record + post[i] + ",";
}
temp_record = temp_record + output.getOutputLabel();
writer.println(temp_record);
}
writer.flush();
writer.close();
//resp.getWriter().println(temp_record);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
}
}
}
最佳答案
你自己在暗示。
如果您认为您的工作可以在 10 分钟内完成,您可以单独使用任务队列。
否则,您将需要结合使用任务队列和后端。您需要将其推送到后端实例中。看看Push queues and backends
更新 - 使用模块而不是后端
后端已弃用,取而代之的是模块。使用模块的一种方法是:
手动缩放实例对其运行时间没有限制。如果实例具有手动扩展,您可以在“/_ah/start”请求中“永远”运行。嘿,如果你愿意,你甚至可以启动线程。但这对于这项工作来说应该不是必需的。一直运行直到完成。
关于java - Google App Engine 中长时间运行的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738860/
我有一个独立的 Thread 应用程序。这是一个等待消息的监听器,当消息到达时执行一些操作,其中我必须将消息保存在数据库中。但我遇到了问题,因为如果我运行应用程序并“手动发送消息”,一切都会正常工作,
我有以下php代码: sleep(65); $query = "UPDATE database.table SET XXXXXXX = XXXXXXX - ".$YYYYYY." WHERE
我正在开发一个业余爱好应用程序。它在主布局中使用 webview。单击 webview 内的链接会使用户保持在 webview 内。启动后一切正常,但仍在应用程序内。但是,在手机休眠一段时间后,我重新
我目前运行的应用程序需要最大堆大小为 16GB。 目前我使用以下标志来处理垃圾回收。 -XX\:+UseParNewGC, -XX\:+UseConcMarkSweepGC, -XX:CMSIniti
$ uname -a Darwin Wheelie-Cyberman 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011
在 while 循环仍在休眠时退出它的最简单方法是什么?是否有某种函数可以在 sleep 时检测某个值是否为真? 或者我是否在循环中设置一个小 sleep 并检查如果不再睡一会儿就退出?如果可以,我该
我正在 Ubunu 的 Jetty 6 上运行 Java Web 服务器,用于基于反向 ajax 的 Web。而且我在向浏览器重新发送数据的线程滞后方面遇到了严重的问题。很多时候,一些线程开始 hib
当我运行长时间操作时,我遇到来自 IIS 的请求超时。我的 ASP.NET 应用程序正在后台处理数据,但处理的记录数量很大,因此操作需要很长时间。 但是,我认为 IIS 使 session 超时。这是
我不确定从哪里开始解决这个问题,但如果我有一个 AJAX 网络应用程序向服务器发送请求并在数据库(在我的例子中是 postgresql)上运行长查询,有没有办法停止或如果仍在运行时用户刷新页面或关闭
我是一名优秀的程序员,十分优秀!