如何实现由文件支持的大型增长Python列表,并且在任何时候都没有加载到内存中

我有一个python脚本,需要维护一些值作为列表并追加到列表中,每n秒持续一个无限期,直到用户退出脚本。我希望列表可以附加到文件中,而不需要将列表内容加载到内存中,只有在内存中的部分才是要附加的值。如何实现由文件支持的大型增长Python列表,并且在任何时候都没有加载到内存中

我试过Shelve但是在运行一些测试后,我发现在某些时候,我将不得不将现有的持久列表加载到内存中并追加到它,writeback = true,它将整个文件保存到内存并只在最后写入文件。

的脚本是这样的: -

d = shelve.open(reportDir+curDatName+ (processName.rsplit('.', 1)[0] if processName.endswith('.exe') else processName)) 

global counter

global startTime

d['CPU|'+pid] = []

d['RAM|'+pid] = []

d['THREADS|'+pid] = []

startTime = datetime.datetime.now()

while(not quit):

print('Took a snapshot')

counter = counter + 1

p = psutil.Process(int(pid))

list = d['CPU|'+pid]

print(list)

list.append(p.cpu_percent(0.1)/psutil.cpu_count(0.1))

d['CPU|'+pid] = list

print('CPU '+ str(p.cpu_percent(0.1)/psutil.cpu_count(0.1)))

list = d['RAM|'+pid]

list.append(p.memory_percent())

d['RAM|'+pid] = list

print('RAM '+ str(p.memory_percent()))

list = d['THREADS|'+pid]

list.append(p.num_threads())

d['THREADS|'+pid] = list

print('Threads- '+ str(p.num_threads()))

print(d['RAM|'+pid])

i=0

while(not quit and i < interval/chunkWait): #wait in chunks

i = i+1

time.sleep(chunkWait)

是否有任何其他软件包能为我实现所需的功能?

回答:

您想要使用内存数据结构列表来存储太大而不适合内存的数据。您正在寻求一些软件包,可以让您假装您正在使用列表,实际上您正在处理一个实际上具有基于磁盘的后备存储的类似列表的界面。这很方便,至少有一个一流的专有API,我知道它是供应商自己的数据库(所以不是通用的)。毫无疑问,某个地方有人提出了一个类似于数据库表的类列表接口,但这只是语法上的糖。我怀疑你将不得不放弃你的列表方法并学习数据库API。这不是一个这样的建议的论坛,但我认为我不会因为说mysql是免费的并且具有非常好的声誉而被抨击或低估。

以上是 如何实现由文件支持的大型增长Python列表,并且在任何时候都没有加载到内存中 的全部内容, 来源链接: utcz.com/qa/261303.html

回到顶部