pandas
Dataframe
出现“内存泄漏”问题。显然这是一个知道问题:Memory leak using pandas dataframe
答案中使用的技巧(使用gc.collect
手动收集垃圾和空闲内存),但效果很慢。
我的问题是我需要以500Hz运行此循环:
(在1000个循环上测试,time.time()
:可能不准确,但可以很好地了解问题)
我的问题是:gc.collect
的其他替代方法是什么,哪种方法可以正常但速度太慢。我不能在1000个周期内调用一次,因为这个特定的周期非常慢,我需要一个可靠的频率。
我用于测试的代码如下:
import pandas as pd
import os
import gc
from multiprocessing import Process,Pipe
import time
a,b=Pipe()
def sender(a): # this one does not leak
print "sender :", os.getpid()
while True:
Data=pd.DataFrame([[1.,2.,3.]],columns=['a','b','c'])
a.send(Data)
def main(b): ### this one cause a memory "leak" !!!!! only when the pipe is on
try:
print "receiver :", os.getpid()
i=0
#t=time.time() # for timing purpose
while True:
Data=b.recv()
cmd=Data['a'].values[0]
i+=1
#gc.collect() # remove the memory leak, but slooooooow
#if i%1000==0: # loop for timing purpose
#t1=time.time()
#print i
#print (t1-t)/1000
#t=t1
except (Exception,KeyboardInterrupt) as e:
print "Exception : ", e
raise
try:
p=Process(target=main,args=(b,))
q=Process(target=sender,args=(a,))
p.start()
q.start()
except (Exception,KeyboardInterrupt) as e:
print "Exception in main : ", e
p.terminate()
q.terminate()