我有一个使用pyzmq实现的生产者-消费者实现(我从这里举了一个例子:我有一个生产者,它同时为几种不同类型的消费者生产对象,其中每种类型的消费者以不同的方式处理该对象。
此外,我有一个经理/主管,获取有关处理对象(例如sent_from_producer_to_consumer_1
, processed_by_consumer_2
等)的状态的消息,它存储,对于每个对象,所有这些状态在字典中,它的键是对象逻辑ID,它的值是状态列表。
我想保护我的系统在发生系统故障时不丢失全部信息,方法是将其恢复到最近的状态。
所以我的问题是——我该怎么做?我如何确保管理器的对象状态是磁盘持久化的?
对于一个简单的用例,您可以使用pickle
将数据序列化到磁盘,或者如果您的对象非常简单,您甚至可以使用JSON。数据库也适用于这样的任务,并且可伸缩性更好。
Pickle的工作原理如下:
>>> import pickle
>>> d = dict(foo=1, bar=2, baz=3)
>>> with open("/tmp/test.pkl", "wb") as f:
... pickle.dump(d, f)
...
>>> with open("/tmp/test.pkl", "wb") as f:
... print(pickle.load(f))
{'bar': 2, 'foo': 1, 'baz': 3}
我找到了一个名为shelve的包/库,它满足了我的愿望。来自文档:
" shelf "是一个持久的、类似字典的对象…