【问题标题】:When are tasks created by Google App Engine Pipelines APIGoogle App Engine Pipelines API 何时创建任务
【发布时间】:2023-04-01 17:20:02
【问题描述】:

在启动这样的管道时有哪些幕后细节(只是管道 API 演示代码中的复制粘贴示例行):

split_counts = yield SplitCount(entity_kind, property_name, *value_list)

yield 是否只会将一 (1) 个任务排入任务队列,或者 Pipelines 会根据正在完成的工作,为每个 Pipeline “自己”使用不同数量的任务在内部处理此任务?

问题的上下文: 从头开始解决工作,使用任务队列、异步 url 获取、内存缓存、后端/模块的组合保持完全控制,从而控制有关任务和正在使用的相应任务队列的所有细节;

或者,

只依赖管道。

【问题讨论】:

  • 我想知道同样的事情,文档对此非常有限。我的意思是,我有一些管道正在运行(异步),但我真的不明白它们在哪里运行。你有什么发现吗?

标签: google-app-engine task-queue urlfetch


【解决方案1】:

当您生成一个 Pipeline 实例时,管道 api 基本上会将单个“运行”任务排入队列。

但是,当您产生的管道返回时,可能会有一个额外的“输出”任务排队,以根据它们将结果转发到任何下游管道(并“运行”它们)......还有一个“扇出”任务参与其中不知何故。

当整个管道链运行后,每个组成管道都会有另一个“最终”任务排队。

查看定义请求处理程序的 pipeline.py 底部。

当然,其中任何一个都可以多次入队,就像 GAE 任务队列中的任何任务一样,如果您的管道实例在运行时引发任何未捕获的异常,则将重试该任务。

更多细节(不是专门关于任务,更多的是我试图理解所涉及的 yield 表达式):
https://stackoverflow.com/a/25620665/202168

【讨论】:

    【解决方案2】:

    简而言之,您很可能需要Task Queues、memcache、异步 url 提取等,正如您所提到的。收益和管道与任务队列无关,它们管理一种协程形式,它本身不能执行任何上述操作。

    尝试消除一些明显的混淆:产量不会创建任务。管道不是任务队列。 Yield expressions 是不依赖于 AppEngine 的 Python 语言结构。相反,任务是数据结构(队列)中的 AppEngine 记录,AppEngine 运行时使用它来启动允许运行长达 10 分钟的新后台进程(不服务于浏览器请求)。包括后台任务的任何进程都可以选择使用产量来管理该进程内的流控制。我希望这会有所帮助。

    【讨论】:

    • 我知道您的回答中的内容,并且我在询问 Pipelines API 何时创建任务。上面的 Python sn-p 只是这个问题的起点。该问题的目的是对 Pipelines API 创建的任务数量和时间有一个很好的了解。什么决定了 Pipelines API 产生的任务?
    • 您编写的 Pipelines API 在哪里,以便我更好地理解您的意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多