python谁在维护_在python中维护大列表

本文探讨了使用zc.blist作为数据库缓存的优势,解释了如何通过设置`cache_size`来控制内存使用,并展示了不同操作(如添加、插入、修改和删除元素)对性能的影响。通过调整缓存大小,可以平衡RAM使用和访问速度。同时,介绍了如何观察内存变化及打包过程的成本。代码示例展示了在ZODB数据库中应用zc.blist的方法。
摘要由CSDN通过智能技术生成

使用zc.B列表毕竟可以带来很好的效果,在创建数据库时设置“cache_size”选项可以控制将留在RAM中的数据的大小。如果你不这样做的话,旧内存的大小会变得更大。”事务.提交“经常这样。通过定义一个大的缓存大小事务.提交通常,blist最后访问的bucket将保留在RAM中,这样您就可以快速访问它们,并且RAM的使用量不会增长太多。在

打包是非常昂贵的,但如果你有一个大的硬盘,你不必经常这样做。在

这里有一些代码可以自己尝试。在后台运行“top”并更改cache峎u大小,以查看它如何影响已使用的RAM量。在import time

import os

import glob

from ZODB import DB

from ZODB.FileStorage import FileStorage

import transaction

from zc.blist import BList

print('STARTING')

random = open('/dev/urandom', 'rb')

def test_list(my_list, loops = 1000, element_size = 100):

print('testing list')

start = time.time()

for loop in xrange(loops):

my_list.append(random.read(element_size))

print('appending %s elements took %.4f seconds' % (loops, time.time() - start))

start = time.time()

length = len(my_list)

print('length calculated in %.4f seconds' % (time.time() - start,))

start = time.time()

for loop in xrange(loops):

my_list.insert(length / 2, random.read(element_size))

print('inserting %s elements took %.4f seconds' % (loops, time.time() - start))

start = time.time()

for loop in xrange(loops):

my_list[loop] = my_list[loop][1:] + my_list[loop][0]

print('modifying %s elements took %.4f seconds' % (loops, time.time() - start))

start = time.time()

for loop in xrange(loops):

del my_list[0]

print('removing %s elements took %.4f seconds' % (loops, time.time() - start))

start = time.time()

transaction.commit()

print('committing all above took %.4f seconds' % (time.time() - start,))

del my_list[:loops]

transaction.commit()

start = time.time()

pack()

print('packing after removing %s elements took %.4f seconds' % (loops, time.time() - start))

for filename in glob.glob('database.db*'):

try:

os.unlink(filename)

except OSError:

pass

db = DB(FileStorage('database.db'),

cache_size = 2000)

def pack():

db.pack()

root = db.open().root()

root['my_list'] = BList()

print('inserting initial data to blist')

for loop in xrange(10):

root['my_list'].extend(random.read(100) for x in xrange(100000))

transaction.commit()

transaction.commit()

test_list(root['my_list'])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值