任务队列不会运行我的所有任务 - App引擎后端

时间:2012-05-10 23:40:33

标签: google-app-engine task-queue

我在后端实例上运行了一个应用程序。它有11个任务。第一个是由/ _ah / start启动的,而它又启动了另外十个工作任务。工人任务具有以下结构:

done = False
while not done:
    do_important_stuff()
    time.sleep (30)
    if a_long_time_has_passed():
        done = True

每次app引擎上的执行行为都是一样的。调度任务运行并将10个工作任务排入队列。前七个工作任务开始运行,正确执行。最后三个坐在队列中,从未运行过。任务队列应用控制台显示队列中的所有十个任务,其中七个任务正在运行。

该应用程序也停止响应HTTP请求,返回503状态代码,日志未显示我的http处理程序被调用。

工作组任务队列配置为最大速率为1 / s和2个存储桶。令人好奇的是,管理控制台显示强制执行速率为0.1秒。由于任务永远运行,因此它们不会返回不成功的完成状态代码。并且cpu负载可以忽略不计。工作人员主要进行URL提取,然后再等30秒再做一次。

日志没用。我不知道去哪里找到能帮助我解决问题的诊断方法。我在免费帐户中测试。一次可以执行8个任务的限制吗?我在文档中看不到这些,但我的想法已经用完了。最后,我想要并行执行更多任务。

感谢你给我的任何建议。

1 个答案:

答案 0 :(得分:3)

后端实例将处理多少个并发请求是有限制的,而且听起来你正在遇到这个限制。

替代方案包括:

  • 使用常规任务队列而不是针对后端的任务队列
  • 启动后端的多个实例
  • 使用线程从启动请求中自己启动线程,而不是依赖任务队列为您执行线程

请注意,如果您的任务受CPU限制,那么在5,2或甚至1的情况下运行10个任务将无法获得任何额外好处。