首页 文章

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

提问于
浏览
2

我有一个在后端实例上运行的应用程序 . 它有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 回答

  • 3

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

    替代方案包括:

    • 使用常规任务队列而不是后端的任务队列

    • 启动后端的多个实例

    • 使用线程从启动请求中自己启动线程,而不是依赖任务队列为您执行

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

相关问题