Google app engine Google应用程序引擎-队列完成时的事件

Google app engine Google应用程序引擎-队列完成时的事件,google-app-engine,queue,task,task-queue,Google App Engine,Queue,Task,Task Queue,我开始构建一个批量上传工具,并且我正在尝试解决如何实现其中一个需求 其思想是,用户将上传一个CSV文件,工具将对其进行解析,并将CSV的每一行作为要运行的任务发送到任务队列。完成所有任务(与特定CSV文件相关)后,将向用户发送摘要报告 我正在使用谷歌应用程序引擎,过去我使用标准任务队列来处理任务。但是,对于标准任务队列,无法知道队列何时完成,不会触发事件来触发报告生成,因此我不确定如何实现这一点 我对它进行了更多的研究,我知道谷歌也提供谷歌PubSub。这更复杂,似乎更适合,但我仍然不知道如何在

我开始构建一个批量上传工具,并且我正在尝试解决如何实现其中一个需求

其思想是,用户将上传一个CSV文件,工具将对其进行解析,并将CSV的每一行作为要运行的任务发送到任务队列。完成所有任务(与特定CSV文件相关)后,将向用户发送摘要报告

我正在使用谷歌应用程序引擎,过去我使用标准任务队列来处理任务。但是,对于标准任务队列,无法知道队列何时完成,不会触发事件来触发报告生成,因此我不确定如何实现这一点


我对它进行了更多的研究,我知道谷歌也提供谷歌PubSub。这更复杂,似乎更适合,但我仍然不知道如何在PubSub队列完成时触发和事件,有什么想法吗?

使用GAE管道API可能更容易,它会将此作为其功能的基本部分

有一篇很好的文章对此进行了解释

以及一个相关的SO问题,该问题恰好提到了迁移到此API的相同原因,并且有一个极好的答案:

我自己还没有用过,但只是时间问题:)

还可以实施一个方案来跟踪仍处于活动状态的相关任务,请参阅


您还可以检查队列(近似)状态,请参见本周早些时候我遇到了一个类似的问题,并设法找到了一个很好的解决方法。我所做的是在表中创建一个额外的列,任务在其中插入数据。一旦一个特定任务完成,它会用“完成”更新这个“任务状态”列,否则它将保留为默认的空值。然后,当用户刷新页面或转到特定URL时,或者您执行AJAX调用以查询表中特定id的任务状态时,您可以查看任务是否完成

select * from table where task_status is not null and id = ?;
您还可以创建一个“任务”表,在其中可以存储相关列,而不是修改现有表


希望这对你有所帮助

看来你可以用一个计数器来做这个。使用设置为CSV文件行数的Integer特性创建实体。每个任务在处理完行(在事务中)后,都会减少事务中的计数器。一个任务将计数器设置为0,该任务可能触发该事件。这可能会引起太多的争论


另一种可能是让每个任务在处理完一行后创建一个特定类型的实体。然后,您可以计算这些实体的数量,以确定何时处理了所有行。

谢谢。然而,我使用的是PHP,这些库似乎只支持java和python。还有其他想法吗?