Python'da, kullanıcı bir düğmeyi tıkladığında matplotlib kullanılarak PNG grafikleri oluşturan küçük bir PyQt tabanlı yardımcı program oluşturdum. Her şey ilk birkaç tıklama sırasında iyi çalışır, ancak bir görüntü her oluşturulduğunda, uygulamanın bellek ayak izi yaklaşık 120 MB büyür, sonunda Python'u tamamen çökertir.PyQt ve matplotlib kullanırken belleği sızdıran Python
Grafik oluşturulduktan sonra bu belleği nasıl kurtarabilirim?
import datetime as dt
from datetime import datetime
import os
import gc
# For Graphing
import matplotlib
from pylab import figure, show, savefig
from matplotlib import figure as matfigure
from matplotlib.dates import MonthLocator, WeekdayLocator, DateFormatter, DayLocator
from matplotlib.ticker import MultipleLocator
import matplotlib.pyplot as plot
import matplotlib.ticker as ticker
# For GUI
import sys
from PyQt4 import QtGui, QtCore
class HyperGraph(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setWindowTitle('Title')
self.create_widgets()
def create_widgets(self):
grid = QtGui.QGridLayout()
self.generate_button = QtGui.QPushButton("Generate Graph", self)
grid.addWidget(self.generate_button, 1, 1)
QtCore.QObject.connect(self.generate_button, QtCore.SIGNAL("clicked()"), self.generate_graph)
def generate_graph(self):
try:
fig = figure()
ax = fig.add_axes([1,1,1,1])
# set title
ax.set_title('Title')
# configure x axis
plot.xlim(dt.date.today() - dt.timedelta(days=180), dt.date.today())
ax.set_xlabel('Date')
fig.set_figwidth(100)
# configure y axis
plot.ylim(0, 200)
ax.set_ylabel('Price')
fig.set_figheight(30)
# export the graph to a png file
plot.savefig('graph.png')
except:
print 'Error'
plot.close(fig)
gc.collect()
app = QtGui.QApplication(sys.argv)
hyper_graph = HyperGraph()
hyper_graph.show()
sys.exit(app.exec_())
plot.savefig ('graph.png') komutu bellek yutuyor Ne gibi görünüyor: Benim burada kod basitleştirilmiş bir sürümünü dahil ettik.
Herhangi bir yardım için minnettar olurum!
Teşekkürler! Bu çok iyi çalıştı. Cevabınızın daha fazla ayrıntıya bakması gerekecek. –