我正在使用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(),它将按预期运行。