用 Celery 组合链、组和块

2023-12-26

我想使用 Celery 作为 URL 抓取器。

我有一个 Url 列表,我必须对每个 URL 执行 HTTP 请求并将结果写入文件中(整个列表使用同一文件)。

我的第一个想法是让 Celery 调用的任务中的这段代码击败所有n分钟 :

@app.task
def get_urls(self):
    results = [get_url_content.si(
        url=url
    ) for url in urls]

    ch = chain(
        group(*results),
        write_result_on_disk.s()
    )

    return ch()

这段代码工作得很好,但有一个问题:我有一千个 URL 需要抓取,如果其中 1 个 get_url_content 失败,则不会调用 write_result_on_disk 并且我们会丢失所有先前抓取的内容。

我想做的是chunk通过分割 URL 来执行任务,获取结果并将其写入磁盘。例如20个url的内容被写入磁盘上。

请问你有什么想法吗?我尝试过chunks()功能,但没有得到真正有用的结果。


使用 CeleryBeat 执行类似 cron 的任务是一个好主意。

我会尝试捕获你的异常get_url_content微任务。当你抓住它们时,只需归还其他东西即可。这样,您可以在 summarise_task 中评估(例如计数、列出、检查)它们。

如何使用chunks和链条chunks与另一个任务:

步骤 1:将块转换为组:

如中所述http://docs.celeryproject.org/en/latest/userguide/canvas.html#chunks http://docs.celeryproject.org/en/latest/userguide/canvas.html#chunks, .group()转换类型的对象celery.canvas.chunks成组,这是 Celery 中更常见的类型。

第 2 步:链接组和任务

中的“通过组合让你大吃一惊”部分http://docs.celeryproject.org/en/latest/userguide/canvas.html#the-primitives http://docs.celeryproject.org/en/latest/userguide/canvas.html#the-primitives提到:

将一个组与另一个任务链接在一起将自动升级 它是一个和弦


这是包含这两个任务的一些代码以及我通常如何调用它们:

@app.task
def solve_micro_task(arg: str) -> dict:
    ...

@app.task
def summarize(items: List[List[dict]]):
    flat_list = [item for sublist in items for item in sublist]
    for report in flat_list:
        ...

chunk_tasks = solve_micro_task.chunks(<your iterator, e.g., a list>), 10)  # type: celery.canvas.chunks
summarize_task = summarize.s()
chain(chunk_tasks.group(), summarize_task)()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 Celery 组合链、组和块 的相关文章

  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • SQL Server 中 7 天滚动平均值的 SQL 查询

    我有一个每小时产品使用情况 产品使用次数 数据的表格 ID bigint ProductId tinyint Date int YYYYMMDD Hour tinyint UsageCount int 1 20140901 0 10 1 2
  • 单页应用程序 (SPA) 的单点登录 (SSO) 解决方案/架构

    我研究 SPA 的 SSO 解决方案已经有一段时间了 有很多解决方案存在细微的差别 同时我还发现并不是每个人对 SSO 都有相同的理解 并且没有多少针对 SPA 的 SSO 既定模式 因此 我并不是要求详细的设计 架构 而是只是尝试看看这个
  • C# listview - 嵌入控件

    任何人都可以帮助我在列表视图中嵌入控件吗 我需要添加按钮控件作为列表视图的子项 谢谢 好吧 您可能正在谈论 Windows 窗体ListView http msdn microsoft com en us library system wi
  • Twitter Bootstrap 导航栏菜单滚动

    使用时twitter bootstrap 3 在移动设备菜单上nabber有水平和垂直滚动条 它不在那里2 3我不知道如何禁用它并让菜单项扩展至完整而没有任何滚动条 这是 Bootstrap 3 的新功能 最好的方法是删除或注释掉 less
  • 是否可以将JavaFX的WebView更改为Chrome

    我们正在尝试创建一个使用 html5 canvas 打开 url 的桌面应用程序 我们使用 Java 8 JavaFX 实现它 但我们在渲染草图时遇到了糟糕的反应 这在 Chrome 浏览器中运行良好 是否可以在JavaFx应用程序中嵌入c
  • 拆分 pandas 中的地址列

    我有一个像这样的熊猫数据集 import pandas as pd data id 001 002 003 004 address William J Clare n290 Valley Dr nCasper WY 82604 nUSA 1
  • 为什么 Boost.Spirit 能够正确地将标识符解析为 std::string,而不是解析为仅由 std::string 组成的改编结构?

    我为标识符定义了一条规则 以字母字符开头 后跟任意数量的字母数字字符 当我直接解析为时 我得到不同的结果std string与包含单个的改编结构相比std string 如果我的语法的属性是std string Qi 会正确地将字符顺序调整
  • 如何设置程序的CPU亲和力?

    我有一个用 C 编写的程序 我使用 VSTS 2008 Net 3 5 Windows Vista Enterprise x86 来开发 Windows 窗体应用程序 我当前的计算机是双核CPU 我想将程序的CPU亲和力设置为在特定CPU上
  • Linq动态在哪里算?

    是否可以在 where 中使用列表 我想要这样的东西 public class Customer string FirtsName string LastName int Number 我想使用复选框来过滤客户 如果我选择名字和号码 那么将
  • (heroku) 错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT

    我是一名初级 Discord 机器人开发人员 希望在 Heroku 上 24 7 托管他的 heroku 机器人 大约之后 部署 1 分钟后 出现错误 2020 12 28T11 40 54 000493 00 00 heroku web
  • Flutter Firebase 存储无法工作:没有默认存储桶

    我正在尝试上传一个pdf file to Firebase Storage使用此功能 static Future
  • Django ModelForms:将ManyToMany字段显示为单选

    在 Django 应用程序中 我有一个模型 Bet 其中包含与 Django 用户模型的 ManyToMany 关系 class Bet models Model participants models ManyToManyField Us
  • 触发AWS代码构建时指定文件路径

    我已经创建了 AWS codebuild 管道 每当我推送到主分支时它就会自动触发 现在 我只想在 Dockerfile 中发生更改时触发它 以下是我的项目结构 casestudy gt Docker gt Dockerfile gt In
  • “图标路径无效” - Apple App Store 团队返回错误

    这是我第一次向 App Store 提交内容 遇到了很多问题 首先 我要说的是 该应用程序是用PhoneGap 使用科尔多瓦1 9 0框架 它的 Web 应用程序端很好 验证了 W3 并且在浏览器中完美运行 在无法手动修复问题后 我从头开始
  • 如何在 PlayFramework 中的 Json Reads 中添加自定义 ValidationError

    我正在使用 play Reads 验证助手 我想在 json 异常的情况下显示一些自定义消息 例如 长度是最小值然后指定或给定的电子邮件无效 我知道 play 显示这样的错误消息error minLength但我想显示一条合理的消息 例如请
  • 在 Mayavi 中锁定相机

    我正在尝试使用 mayavi 中的一系列数据文件制作动画 不幸的是 我注意到相机没有锁定 它正在变焦和缩小 我认为发生这种情况是因为我的网格的 Z 分量正在变化 并且 Mayavi 正在尝试重新计算比例 How can I fix it i
  • 使用每个用户数据的单独密钥加密 SQL Server Azure 数据库中的数据

    我正在尝试创建基于 Azure SQL 数据库后端的服务 该服务将是多租户的 并将包含来自多个 客户端 可能有数十万 的高度敏感信息 这些信息必须彼此严格隔离并严格防止数据泄漏 按设计 使用如此多的单独数据库是不可行的 因为会有很多客户 但
  • 将背景颜色的下边缘设为另一种颜色

    我想要我的底部background color成为另一种颜色 我确信这涉及到linear gradient 但不确定如何实施 示例代码 background height 100px width 200px background color
  • 在python多处理中修改对象

    我有大量自定义对象 需要对其执行独立 可并行 任务 包括修改对象参数 我尝试过使用 Manager dict 和 sharedmem ory 但两者都不起作用 例如 import numpy as np import multiproces
  • 用 Celery 组合链、组和块

    我想使用 Celery 作为 URL 抓取器 我有一个 Url 列表 我必须对每个 URL 执行 HTTP 请求并将结果写入文件中 整个列表使用同一文件 我的第一个想法是让 Celery 调用的任务中的这段代码击败所有n分钟 app tas