我正在对一系列文件中的数据进行多重处理。 为了达到这个目的,我构建了一个类来分发数据。 我启动了4个进程,它们将访问同一个类并检索数据。 问题是,如果我使用类方法(retrieve())来检索数据,内存将继续增加。如果我不这样做,内存是稳定的,即使getData()不断刷新数据。如何在检索数据时保持稳定的内存使用率?或者以任何其他方式实现同样的目标
import pandas as pd
from multiprocessing import Process, RLock
from multiprocessing.managers import BaseManager
class myclass():
def __init__(self, path):
self.path = path
self.lock = RLock()
self.getIter()
def getIter(self):
self.iter = pd.read_csv(self.path, chunksize=1000)
def getData(self):
with self.lock:
try:
self.data = next(self.iter)
except:
self.getIter()
self.data = next(self.iter)
def retrieve(self):
return self.data
def worker(c):
while True:
c.getData()
# Uncommenting the following line, memory usage goes up
data = c.retrieve()
#Generate a testing file
with open('tmp.csv', 'w') as f:
for i in range(1000000):
f.write('%f\n'%(i*1.))
BaseManager.register('myclass', myclass)
bm = BaseManager()
bm.start()
c = bm.myclass('tmp.csv')
for i in range(4):
p = Process(target=worker, args=(c,))
p.start()
我无法找到原因,也无法解决它,但在将返回变量的数据类型从pandas.DataFrame更改为str(json字符串)后,问题出现了
相关问题 更多 >
编程相关推荐