腌制的类实例加载不一致

时间:2019-05-12 13:40:55

标签: python-3.x pickle

我正在使用cuckoopy软件包来创建一个布谷鸟过滤器,并维护一段时间后看到的对象的状态。该程序包不包含在两次运行之间将过滤器保存到磁盘的方法,因此我尝试使用pickle。当我重复运行代码时,pickle会加载数据,但是状态不正确。另一方面,如果我在python shell中模拟该过程而不退出,则可以正常工作。因为它在一种情况下有效,但在另一种情况下无效,所以我不确定如何确定解决方案。

我有在python shell中有效的代码。过滤器可以腌制,保存到磁盘,重新加载并保持状态。

import pickle
import cuckoopy

def load_cuckoo_filter(path):
    try:
        old = pickle.load(open(path, 'rb'))
        return old
    except:
        print("creating new filter")
        return cuckoopy.CuckooFilter(10000)

def write_cuckoo_filter(filter, path):
    pickle.dump(filter, open(path, 'wb'))
    return

def main():
    data = load_cuckoo_filter('cuckoo.out')
    if data.contains('a'):
        print("data contains a")
    else: 
        data.insert('a')
        print("adding a to filter")
        write_cuckoo_filter(data, 'cuckoo.out')
    return

我希望我第一次运行此操作,以便创建过滤器并添加“ a”。每次之后,我希望它能够识别出过滤器中已经存在“ a”。相反,在命令行上运行时,它会反复向过滤器添加“ a”。另一方面,如果我在shell中重复运行main(),它将按预期运行。

0 个答案:

没有答案