gpt4 book ai didi

python - 如何在 Python 中获取 Riak 对象、更改其值并将其与所有索引一起存储回来

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:28 29 4
gpt4 key购买 nike

我正在使用 Riak 数据库来存储由多个脚本并行使用和处理的 Python 应用程序对象。因此,我需要将它们锁定在不同的位置,以避免同时被多个脚本处理,如下所示:

riak_bucket = riak_connect('clusters')
cluster = riak_bucket.get(job_uuid).get_data()
cluster['status'] = 'locked'
riak_obj = riak_bucket.new(job_uuid, data=cluster)
riak_obj.add_index('username_bin', cluster['username'])
riak_obj.add_index('hostname_bin', cluster['hostname'])
riak_obj.store()

问题是,要做一件简单、可重复的事情需要相当多的代码,而且考虑到锁定经常发生,我想找到一种更简单、更干净的方法来做到这一点。我尝试编写一个函数来执行锁定/解锁,就像这样(对于不同的对象,称为“build”):

def build_job_locker(uuid, status='locked'):
riak_bucket = riak_connect('builds')
build = riak_bucket.get(uuid).get_data()
build['status'] = status
riak_obj = riak_bucket.new(build['uuid'], data=build)
riak_obj.add_index('cluster_uuid_bin', build['cluster_uuid'])
riak_obj.add_index('username_bin', build['username'])
riak_obj.store()
# when locking, return the locked db object to avoid fetching it again
if 'locked' in status:
return build
else:
return

但是由于这些对象显然彼此之间有很大不同,它们具有不同的索引等等,所以我最终为每个对象编写了一个锁定函数......这几乎和根本没有这些函数一样困惑并重复代码。

问题是:有没有办法编写一个通用函数来执行此操作,知道每个对象都有一个“状态”字段,将它们锁定在数据库中并保留所有索引和其他属性?或者,也许还有另一种我没有想到的更简单的方法?

最佳答案

经过更多研究以及在各种 IRC channel 上提出的问题后,这似乎是不可行的,因为无法从 Riak 获取有关对象的此类元数据。

关于python - 如何在 Python 中获取 Riak 对象、更改其值并将其与所有索引一起存储回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16174818/

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