2

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

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

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

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

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

日志没有帮助。我不知道在哪里可以找到可以帮助我解决问题的诊断程序。我正在使用免费帐户进行测试。一次执行是否有 8 个任务的限制?我在文档中没有看到类似的内容,但我已经没有想法了。最终,我想并行运行更多任务。

谢谢你能给我的任何建议。

4

1 回答 1

3

后端实例将同时处理多少个请求是有限制的,听起来您正在遇到这个限制。

替代方案包括:

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

请注意,如果您的任务受 CPU 限制,您不会从运行 10 个任务超过 5 个、2 个甚至 1 个任务中获得任何额外的好处。

于 2012-05-11T03:53:04.030 回答