gpt4 book ai didi

python - 将(特定的) celery 结果对象保留在 NoSQL 后端以供独立使用

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:55 25 4
gpt4 key购买 nike

对于 celery 的高级用户来说,这是一个相当具体的问题。让我解释一下我的用例:

用例

我必须运行 ~1k-100k 任务来运行模拟(电影)并将模拟数据作为相当大的较小对象(帧)列表返回,比如每帧 10k-100k 和 1k 帧。所以产生的数据总量会非常大,但是假设我有一个数据库可以处理这个。速度在这里不是关键因素。稍后我需要计算每个帧的特征,这些特征可以完全独立完成。

框架看起来像一个dict,它指向一些numpy数组和其他简单数据,如字符串和数字,并有一个唯一的标识符UUID。

重要的是,最终感兴趣的对象是这些生成列表的任意连接和拆分。作为一个比喻,考虑将结果电影切碎并重新组合成新电影。这些最终列表(电影)基本上是使用 UUID 对帧的引用列表。

现在,我考虑使用 celery 获取这些第一部电影,因为无论如何这些最终都会在后端数据库中,我可能会无限期地保留这些结果,至少是我指定要保留的那些。

我的问题

我能否配置一个后端,最好是一个 NonSQL 数据库,以保持结果并在以后使用对象 UUID 独立于 Celery 访问这些结果。如果是这样,由于开销和性能等原因,这是否有意义。

另一种可能性是不返回任何东西,让工作人员将结果存储在数据库中。那是首选吗?当 Celery 已经可以做到这一点时,似乎没有必要与另一个数据库进行第二个通信 channel 。

我还对关于将 Celery 通常用于运行时间长 (>1h) 并返回大型结果对象的高度独立任务的评论感兴趣。失败没有问题,可以重新启动。由此产生的电影是随机的!所以函数式方法可能会有问题。即使存储随机种子也可能无法保证可重现的结果!虽然我没有副作用。我只是可能有很多分布广泛的可用 worker 。想象一下在一个封闭的环境中有很多台式机,即使速度很慢,每个工作人员都会提供帮助。网络速度和安全性在这里不是问题。我知道这不是最初的用例,但在这些情况下使用它似乎非常容易。我发现最好的类比是像 Folding@Home 这样的项目。

最佳答案

Can I configure a backend, preferably a NonSQL DB, in a way to keep the results and access these later independent from Celery using the objects UUID.

是的,您可以配置celery 将其结果存储在NoSQL 数据库中,例如redis,以便稍后通过UUID 访问。将控制您感兴趣的行为的两个设置是 result_expiresresult_backend .

result_backend 将指定您要将结果存储在哪个 NoSQL 数据库中(例如,elasticsearch 或 redis),而 result_expires 将指定任务完成后多长时间结果将可供访问。

任务完成后,您可以像这样在 python 中访问结果:

from celery.result import AsyncResult
result = task_name.delay()
print result.id
uuid = result.id
checked_result = AsyncResult(uuid)
# and you can access the result output here however you'd like

And if so does that make sense because of overhead and performance, etc.

我认为这个策略非常有意义。在为 Web 用户生成长时间运行的报告时,我通常会多次使用它。最初的帖子将从 celery 任务返回 UUID。 Web 客户端可以使用 UUID 通过 javascript 轮询应用服务器,以查看任务是否准备就绪/完成。报告准备就绪后,页面可以将用户重定向到允许用户通过传入 UUID 下载或查看报告的路由。

关于python - 将(特定的) celery 结果对象保留在 NoSQL 后端以供独立使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41587933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com