Problem mit Speicherverlust bei PandasPython

Python-Programme
Anonymous
 Problem mit Speicherverlust bei Pandas

Post by Anonymous »

Ich habe ein „Speicherleck“-Problem mit Pandas Dataframe. Anscheinend handelt es sich hierbei um ein bekanntes Problem: Speicherverlust bei Pandas-Datenrahmen
Die in der Antwort verwendeten Tricks (verwenden Sie gc.collect, um Müll manuell zu sammeln und Speicher freizugeben) funktionieren, sind aber ziemlich langsam.
Mein Problem ist, dass ich diese Schleife mit 500 Hz ausführen muss:
  • ohne Garbage Collector: Speicher Leck, aber 0,3-0,4 ms/Schleife
  • mit gc.collect() in der Schleife: 11 ms/Schleife !!!
(getestet auf 1000 Schleifen, mit time.time(): ist vielleicht nicht genau, gibt aber eine gute Vorstellung vom Problem)
Meine Frage ist: Was sind die anderen Alternativen? zum gc.collect, was gut funktioniert, aber zu langsam ist. Ich kann es nicht alle 1000 Zyklen einmal aufrufen, da dieser bestimmte Zyklus extrem langsam sein wird und ich eine zuverlässige Frequenz benötige.
Der Code, den ich zum Testen verwende, ist der folgende:

Code: Select all

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()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post