Skip to content

Garbage collect pyplot figures generated from gopen/gclose #87

@sadielbartholomew

Description

@sadielbartholomew

Figures created using plotting functions wrapped with gopen and gclose functions to produce them on a single graphics file are not properly closed, such that they remain in memory and cause inefficiency. This is demonstrated by the warning produced when ~10-20 of these are opened from one script, for example as a quick contrived means to produce it through a loop such as:

>>> f = cf.read('cfplot_data/tas_A1.nc')[0]
>>> for _ in range(20):
...     cfp.gopen()
...     cfp.con(f.subspace(time=15))
...     cfp.gclose()
... 
/home/slb93/git-repos/cf-plot/cfplot/cfplot.py:6244: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`). Consider using `matplotlib.pyplot.close()`.
  plotvars.master_plot = plot.figure(figsize=(figsize[0], figsize[1]))

We should apply proper garbage collection by closing any figures through matplotlib.pyplot.close() (as advised by the warning), or otherwise. We could consider a means to not close these until the user explicitly instructs to, in case they want to recover a previous plot, but since there doesn't appear to be any functionality in cf-plot to recover a plot once gclose is called anyway (i.e. the plot file saved to disk is the only product/remnant), this would first require further functionality to fetch a previous result.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions