任务队列为空后调用脚本

2024-02-21

我正在运行一个启动多个任务的脚本:

for i in range (0,5):
  taskqueue.add(url='/example', 
                          params={'num': i})

据我了解,这些任务是并行运行的。一旦我刚刚插入队列的所有任务全部完成,我是否可以告诉 AppEngine 运行特定的任务/python 文件?我考虑过向上一次循环迭代中调用的任务发送一个标志,但如果任务并行运行,则不能保证一旦完成,其他任务也完成。

Thanks,

Joel


当您启动任务时,您知道会有多少个任务。将具有“预期”计数或任务列表的实体插入到数据存储中。然后使用计数器或标记来指示任务何时运行。粗略地说,该过程可能类似于:

新种类:

class TaskBatch(db.Model):
    expected_count = db.IntegerProperty()

class TaskMarker(db.Model):
    pass

然后,调整您的调用例程以执行以下操作:

count = 5
taskbatch = TaskBatch(expected_count=count).put()
for i in range(5):
    taskqueue.add(url='/example',
                  params={'num': i, 'batch': str(taskbatch)})

并且,在任务结束时:

def post(self):
    num = self.request.get('num')
    # do your stuff....

    batch = self.request.get('batch')
    TaskMarker(key_name=num, parent=db.Key(batch))
    taskqueue.add(url='/example/isdone',
                  params={'num': i, 'batch': str(taskbatch)})

And the isdone任务可能类似于:

def post(self):
    num = self.request.get('num')
    batch_key = db.Key(self.request.get('batch'))
    batch = TaskBatch.get(batch_key)
    marker_keys = [db.Key.from_path('TaskMarker', i, parent=batch)
                     for i in range(batch.expected_count)]
    markers = db.get(marker_keys)
    if all(markers):
       # do your done action.

确切的过程会略有不同,具体取决于您的用例的具体情况,例如您插入的任务数量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

任务队列为空后调用脚本 的相关文章

随机推荐

  • LDAP:过滤多个UID

    我正在尝试为一个团队设置 mediawiki 并且希望仅对一组用户进行 LDAP 身份验证 我知道我可以提出组 LDAP 身份验证 但是有没有一种快捷方式可以仅过滤一组 uid 进行身份验证 您可以使用的 LDAP 搜索过滤器是 uid a
  • data.table:如何将字符向量传递给函数 get data.table 以将其内容视为列名?

    这是一个数据表 library data table DT lt data table airquality 这个例子产生了我想要的输出 DT New Ozone log Ozone New Wind log Wind 我怎样才能写一个函数
  • 在猫鼬中进行条件查找

    我有两个收藏 文章和书签 articles id 5faa889ade5e0a6326a873d3 name article 1 id 5faa889ade5e0a6326a873d name article 2 书签 id 5faa889
  • 在 eclipse Oxygen 中更改 PHP 语言库

    面向 PHP 开发人员的 Eclipse 版本 氧气释放 4 7 0 内部版本号 20170620 1800 我怎样才能改变PHP Language Library到 PHP 7 参见下面的屏幕 该项目源自先前的 eclipse 版本 已导
  • 使用过多内存从 {raster} 包中提取

    我一直在使用extract函数从raster包使用 shapefile 定义的区域从光栅文件中提取数据 但是 我对该过程现在所需的内存量存在问题 我确实有大量 shapefile 1000 光栅文件很大 1 6gb 我的流程是 shp lt
  • 如何从命令行界面将字符串作为 stdin 传递给 python 脚本

    目前 我正在使用以下命令来执行此操作 python scriptName py
  • 反转 gcc 输出的顺序

    我想颠倒 gcc 在我的程序中发现的错误的顺序 为什么 读取最后一行的第一个错误并避免滚动到第一行 我在 gcc cat tail 和 head 手册上搜索了类似 reverse 的命令 但没有结果 所以 我想要一个以相反顺序打印标准输入的
  • 带有 RVM 的 Ruby 1.9.3 IRB 中的 Unicode 字符

    Update 我发现几乎完全正确类似的问题 https stackoverflow com q 4590725 80851 但它的先决条件略有不同 因此没有多大帮助 Given MacOS 狮子 10 7 3 RVM 1 14 2 红宝石
  • Flutter 文本字段仅允许用户插入给定范围内的数字

    我会强制只插入 1 20 之间的值 如果用户输入 2 没问题 但如果用户在 2 21 之后输入 1 则文本字段将不允许在 2 之后输入 1 是否有任何正则表达式 我尝试过这样但它只允许数字 inputFormatters Filtering
  • dart 中可以有私有构造函数吗?

    我可以在 TypeScript 中执行类似以下操作 class Foo private constructor so this constructor只能从类本身内部访问 如何在 Dart 中实现同样的功能 只需创建一个以以下开头的命名构造
  • Python:itertools.islice 不在循环中工作

    我有这样的代码 opened file f goto line num lines Total number of lines while not found line str next itertools islice f goto li
  • 使用 requirejs 加载 firebase js 时出错

    我使用 RequireJS 加载 Firebase js 库 如下所示 require firebase app firebase storage function firebase firebase initializeApp fireb
  • 为列名传递变量?

    例如 假设您有一个应用了某些 DPLYR 函数的函数 但您不能期望传递给该函数的数据集具有相同的列名称 举一个简单的例子来说明我的意思 假设你有一个数据框 arizona trees arizona trees group arizona
  • 我是否用这个简单的方法调用转发类重新发明了轮子?

    我刚刚发现自己创建了一个类 template
  • 在插入模式下遍历文本

    而在插入模式在Vim中 除了使用箭头键之外 还有什么方法可以遍历文本 向前和向后移动一些字符 If I press h j k and l while in Insert mode the actual characters are pri
  • 使用硬件加速 Android MediaCodec 解码器的本机代码中的访问冲突

    我的目标是使用 Android MediaCodec 解码视频流 然后使用输出图像在本机代码中进行进一步的图像处理 平台 华硕 tf700t android 4 1 1 测试码流 H 264 全高清 24 frm s 内置 Tegra 3
  • 2022年如何调试JavaFX webview

    如何调试 JavaFX Web 视图 我找到两种方法 一种是将外部 chrome 调试器附加到 JavaFX webview 另一种是注入firebug javascript Method 1 似乎使用了一些技巧 例如设置对私有字段的访问权
  • EclipseLink JPA:我可以从一个构建器运行多个查询吗?

    我有一个构建和运行条件查询的方法 该查询执行我想要的操作 特别是它根据用户输入过滤 和排序 记录 此外 查询大小仅限于屏幕上的记录数 这很重要 因为数据表可能非常大 但是 如果应用过滤器 我想计算在查询不受限制的情况下将返回的记录数 因此
  • Service Worker 的中止控制器

    我有一个 LeafletJS 地图 其中包含许多使用服务工作线程缓存的 protobuf 层 这非常有效并且节省了大量的加载时间 我最近添加了一个中止控制器 以在更改缩放级别时停止获取过程 以从浏览器待处理队列中删除当前缩放级别图块 这也节
  • 任务队列为空后调用脚本

    我正在运行一个启动多个任务的脚本 for i in range 0 5 taskqueue add url example params num i 据我了解 这些任务是并行运行的 一旦我刚刚插入队列的所有任务全部完成 我是否可以告诉 Ap