将 json 作为 celery 任务的一部分插入 postgres

     2023-02-24     74

关键词:

【中文标题】将 json 作为 celery 任务的一部分插入 postgres【英文标题】:Insert json into postgres as part of celery task 【发布时间】:2019-02-05 20:54:26 【问题描述】:

我是 Django 和 Celery 的新手。

高级:

我正在开发一个 Django 应用程序。从管理页面使用将提交请求(作业)。这些请求将被发送到 Redis。然后 Celery 将轮询 Redis 并从队列中拉出一个作业。任务完成后,结果将存储在 postgres 中。

这是一个示例任务,用于通过 pytest.main() 启动一些测试。

# task for running tests by marker 
def run_tests_mark(test_marker):
    os.chdir('/service/lib/tests')
    # only allow specific strings to be passed in by the user
    if test_marker not in ['smoke', 'regression']: # update as more tages are introduced to the project
        return 'You have entered an invalid term. Please use either smoke of regression.'
    # run pytest command with self contained reporting
    results = pytest.main(['-v', '--json-report', '-m', test_marker])
    # TODO: after tests run send json report to postgres

代码将运行测试,但正如您在最后一条评论中看到的那样,我想获取生成的 .json.report 并将其存储在 postgres 数据库中 [请注意,我使用帮助程序来获取由results]

现在我感到困惑。

我是否需要首先根据 pytest 生成的 json 报告中的所有键创建一个模型?

如果是这样,我会使用TestResultModel.objects.create(.....) 之类的东西然后将报告插入到 postgres 中吗?

这是 pytest.main 输出的 json 示例

“创建”:1535570420.542123,“持续时间”:215.14111948013306, “退出代码”:1,“根”:“/test”,“环境”:“Python”:“3.6.6”, "平台": "Linux-4.9.93-linuxkit-aufs-x86_64-with-debian-9.5", “包”:“pytest”:“3.6.2”,“py”:“1.5.4”,“pluggy”:“0.6.0”, “插件”:“xdist”:“1.22.5”,“元数据”:“1.7.0”,“json-report”: “0.7.0”、“forked”:“0.2”、“django”:“3.3.3”、“cov”:“2.5.1”、“celery”: "4.2.1", "summary": "passed": 34, "failed": 7, "total": 41

【问题讨论】:

【参考方案1】:

我是否需要先根据 pytest 生成的 json 报告中的所有键创建模型?

通常答案是肯定的。但它看起来不像您保存在数据库中的关系数据。因此,您可以使用JSONField 并一次性将所有内容插入其中。 JSONField 对应于 postgresql 中的 JSONB 字段,旨在存储 json 对象并允许搜索、修改这些对象等。

您可能还想查看https://***.com/a/32091771/267540

【讨论】:

非常感谢您的建议。我将集中精力实现这一点。 很高兴能帮上忙

可以将 OrderedDict 作为 Celery 任务参数传递吗?

】可以将OrderedDict作为Celery任务参数传递吗?【英文标题】:IsitoktopassanOrderedDictasaCelerytaskargument?【发布时间】:2019-04-1005:51:27【问题描述】:我在DjangoREST框架的序列化程序中重写了update方法。在这个update,由于用户可以发送很... 查看详情

将图像传递给 celery 任务

...:2012-03-2213:38:44【问题描述】:我正在编写的应用程序的一部分允许用户上传图像,然后我调整其大小并自动上传到amazons3。目前,图像大小调整正在视图中进行,我想通过celery将其卸载到分布式工作人员。我的问题是将图像提... 查看详情

使用类方法作为 celery 任务

】使用类方法作为celery任务【英文标题】:usingclassmethodsascelerytasks【发布时间】:2012-03-0406:03:45【问题描述】:我正在尝试将类的方法用作django-celery任务,并使用@task装饰器对其进行标记。AnandJeyahar提出了同样的情况here。是这... 查看详情

将所有 celery 任务的日志消息发送到单个文件

...录系统。我所有的任务都使用logger=logging.getLogger(__name__)作为模块范围的记录器。我希望celery记录到“celeryd.log”,我的任务记录到“task 查看详情

celery-定时任务(代码片段)

1.CeleryBeat是什么?  celerybeat是一个调度程序,它定期启动任务,然后由集群中的可用工作程序节点执行任务。  默认情况下,条目是从beat_schedule设置中获取的,但也可以使用自定义存储,例如将条目存储在SQL数据库中。 ... 查看详情

celery+flower+fastapi+rabbitmq,python实现异步消息队列和监控(代码片段)

...图显示了组件之间如何交互的简化图。我们将使用FastAPI作为我们的Celery客户端和RabbitMQ作为消息代理。将Celery客户将运行FastAPI应用程序,并会发出消息/后台作业的RabbitMQ。RabbitMQ将作为消息代理来调解客户端和工作线程之间... 查看详情

celery异步的分布式任务调度理解(代码片段)

...Celery自己没有实现消息队列,而是直接已存在的消息队列作为Broker角色。官方推荐的Broker为 RabbitMQ ,除此之外,Redis、Beanstalkd、MongoDB等也都支持,具体可参考 官方文档 。Celery整体架构可以理解为下图: 整体... 查看详情

Celery 超时后没有将任务放回 RabbitMQ 队列

...重试时,一切正常,所以可能是连接问题。我使用RabbitMQ作为代理,并且Celery被配置为对任务进行后期确认(CELERY_A 查看详情

django学习之celery(芹菜)

Celery介绍文档:http://docs.celeryproject.org/en/latest/index.htmlCelery是一个功能完备,即插即用的异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务的执行。任务执行异常退出,重新启动后,会继续执行队... 查看详情

如何按任务名称检查和取消 Celery 任务

...:2013-03-1215:12:00【问题描述】:我使用Celery(3.0.15)和Redis作为代理。是否有一种直接的方法可以查询Celery队列中存在的具有给定名称的任务的数量?作为后续,有没有办法取消Celery队列中存在的所有具有给定名称的任务?我已经... 查看详情

celery使用(代码片段)

一:什么是Celery一:Celery介绍Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统专注于实时处理的异步任务队列同时也支持任务调度 架构详解:Celery的架构由三部分组成,消息中间件(messagebroker),任务执行单... 查看详情

分布式任务队列celery用法详解

...:这个图我们可以看出,celery基本结构也就是三部分1第一部分broker也就是中间件消息队列,作用就是用来接收应用的请求这一部分常见玩法可以是rabbitmq和redis等2第二部分worker也就是工作队列也就是celery本身的任务队列服务,一... 查看详情

celery学习笔记2

1.定义:Celery是一个异步的任务队列(也叫做分布式任务队列)2.工作结构Celery分为3个部分(1)worker部分负责任务的处理,即工作进程(我的理解工作进程就是你写的python代码,当然还包括python调用系统工具功能)(2)broker部... 查看详情

芹菜 - 无法获取任务结果

...时间】:2018-12-0602:41:03【问题描述】:我使用DjangoORM/Cache作为celery的结果后端。我可以看到在数据库中创建了django_celery_results_taskresult表。任务完成后,结果也会插入到数据库中,可以从MySQL中查看。但是当我尝试使用AsyncResult和... 查看详情

在 ECS 任务上运行 celery worker 并使用 SQS 作为代理

】在ECS任务上运行celeryworker并使用SQS作为代理【英文标题】:RunningceleryworkeronECSTaskandusingSQSasabroker【发布时间】:2022-01-1718:55:36【问题描述】:我正在构建一个Web应用程序,它需要一些长时间运行的任务才能在AWSECS上使用celery作... 查看详情

多个 Celery 进度条

...问题描述】:问题我有一个Django站点,它使用Celery+RabbitMQ作为长期运行任务的任务队列。我将结果存储在Redis中。我已经能够使用Celery的update_state在引导进度条中显示一项任务的进度,并通过按钮向RedisDB进行ajax发布以检索当前... 查看详情

celery的常用知识(代码片段)

什么是Clelery?Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统。专注于实时处理的异步任务队列。同时也支持任务调度。Celery的架构由三部分组成,消息中间件(messagebroker),任务执行单元(worker)和任务执行结果... 查看详情

使用celery的backend异步获取结果

...指明了backend之后,当worker执行完任务,会返回task唯一id作为键,将结果作为值传递给backend,这个时候你可以拿着这个id去redis里面查找结果。以下为案例:#配置fromceleryimportCeleryBROKER_URL=‘redis://:password@localhost:6379/0‘BACKEND_URL=‘r... 查看详情