我的目标是使用Index.js
将一些长时间运行的任务卸载到异步线程中。该任务是作为Django视图的一部分触发的,但是工作似乎并不是异步发生的(响应挂起大约10秒钟,即整个任务在返回之前完成)。我实际上是否必须在视图中放置`const google = require('googleapis');
//const { auth } = require('google-auth-library');
exports.goWithTheDataFlow = (event, callback) => {
const file = event.data;
const context = event.context;
console.log(`Event ${context.eventId}`);
console.log(` Event Type: ${context.eventType}`);
console.log(` Bucket: ${file.bucket}`);
console.log(` File: ${file.name}`);
console.log(` Metageneration: ${file.metageneration}`);
console.log(` Created: ${file.timeCreated}`);
console.log(` Updated: ${file.updated}`);
// console.log(err);
//console.log(projectId);
//console.log(authClient);
google.auth.getApplicationDefault(function (err, authClient, projectId) {
if (err) {
throw err;
}
console.log(err)
console.log(projectId);
const dataflow = google.dataflow({ version: 'v1b3', auth: authClient });
console.log(`gs://${file.bucket}/${file.name}`);
dataflow.projects.templates.create({
projectId: projectId,
resource: {
parameters: {
inputFile: `gs://${file.bucket}/${file.name}`,
output_Table: 'titanium-gamma-212906:np_cf_1.cf1',
//bigQueryLoadingTemporaryDirectory: 'gs://test-bucket-np'
},
jobName: 'json-bq1',
gcsPath: 'gs://dataflow-templates/latest/GCS_Text_to_BigQuery',
//jobName: 'json-bq1',
//gcsPath: 'gs://dataflow-templates/latest/GCS_Text_to_BigQuery',
//output_Table: 'titanium-gamma-212906:np_cf_1.cf1',
//javascriptTextTransformFunctionName: 'transform',
//bigQueryLoadingTemporaryDirectory: 'gs://test-bucket-np'
}
}, function(err, response) {
if (err) {
console.error("problem running dataflow template, error was: ", err);
}
console.log("Dataflow template response: ", response);
callback();
});
});
callback();
};`
代码?为什么?我不应该能够做到这一点(我目前的做法):
"name": "sample-cloud-storage",
"version": "0.0.1",
"dependencies": {
"googleapis": "24.0.0"
}
}
我知道,如果它真的很复杂,我应该安装Celery之类的东西,但是我现在正尝试使它们轻巧。