рдЬрд╝рд░рд╛ рд╕реБрдирд┐рдП рд╕рднреА
рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рд╣реИред рдмрд╕ рдХреЛрдб рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдореЗрдореЛрд░реА рджреЗрдЦреЗрдВред рдлрд┐рд░ "% matplotlib рдЗрдирд▓рд╛рдЗрди" рд╣рдЯрд╛рдПрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker
%matplotlib inline
import os
import sys
import StringIO
import urllib, base64
from matplotlib import rcParams
rcParams['figure.figsize'] = (24, 6)
rcParams['figure.dpi'] = 150
OUTPUT_FILENAME = "Asd"
def printHTML(html):
with open(OUTPUT_FILENAME, "a") as outputFile: outputFile.write(html if type(html) == str else html.encode('utf8') )
def friendlyPlot():
figure = plt.Figure()
ax = plt.subplot2grid((1,2), (0,0))
ax.plot( range(1000), range(1000) )
#plt.show()
fig = plt.gcf()
imgdata = StringIO.StringIO()
fig.savefig(imgdata, format='png')
imgdata.seek(0) # rewind the data
image = imgdata.buf.encode('base64').replace('\n', '')
printHTML('<img src="data:image/png;base64,{0}" /><br />'.format(image))
plt.close('all')
imgdata.close()
open(OUTPUT_FILENAME, 'w').close()
for i in range(500):
friendlyPlot()
рдореИрдВ рдЗрд╕ рдмрдЧ рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рдмрд┐рдирд╛ рдЗрдирд▓рд╛рдЗрди рдкреНрд▓реЙрдЯ рдкрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рдгрд┐рдпрд╛рдВ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реИрдВред
рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдврд╝рдиреЗ рдкрд░ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
len(IPython.kernel.zmq.pylab.backend_inline.show._to_draw)
рдпрд╣ рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд╣рд╛рдВ рдЖрдВрдХрдбрд╝реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╡реЗ рдмрд┐рдирд╛ рдордВрдЬреВрд░реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред
len (IPython.kernel.zmq.pylab.backend_inline.show._to_draw) = 0
BTW, рдореИрдВ рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдкрд░ .plot()
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЬрд┐рд╢ рд░рдЪ рд░рд╣рд╛ рд╣реВрдВред
рдареАрдХ рд╣реИ, рдЙрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫред
рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкрд╛рдВрдбрд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рднреА рднреВрдЦрдВрдбреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреБрдЫ рдбреЗрдЯрд╛ рд░рдЦрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореВрд▓ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкрд╛рдВрдбрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд▓реЙрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдореЗрдореЛрд░реА рд▓рдЧрддреА рд╣реИ?
рдареАрдХ рд╣реИ, рдпрд╣ рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВ 0.16.0 рдкрд╛рдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрджреНрджрд╛ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдмрд╣реБрдд рдмрд╣реБрдд рд╢реБрдХреНрд░рд┐рдпрд╛ред рдореВрд▓ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкрд╛рдВрдбрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ред
рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд░рд▓рддрд╛ рд╕реЗ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker
%matplotlib inline
import os
import sys
import StringIO
import urllib, base64
from matplotlib import rcParams
rcParams['figure.figsize'] = (24, 6)
rcParams['figure.dpi'] = 150
def friendlyPlot():
fig, ax = plt.subplots()
ax.plot(range(1000))
fig.savefig('tmp.png')
plt.close('all')
for i in range(500):
friendlyPlot()
рдпрд╣ рдореЗрдореЛрд░реА рдХреЛ рд▓реАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ IPython рдХреА рддрд░рдл рд╣реИ рдЬреЛ рдХрд┐ pyplot рд╕рд╛рдЗрдб рдирд╣реАрдВ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
import matplotlib.ticker
import os
import sys
import StringIO
import urllib, base64
from matplotlib import rcParams
rcParams['figure.figsize'] = (24, 6)
rcParams['figure.dpi'] = 150
def friendlyPlot():
fig, ax = plt.subplots()
ax.plot(range(1000))
fig.savefig('tmp.png')
plt.close('all')
for i in range(500):
friendlyPlot()
@tacaswell рд╡рд┐рдВрдбреЛрдЬ 7 рдкрд░ рдЖрдкрдХреЗ рдЯреЗрд╕реНрдЯ рдХреЛрдб IPython рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рд▓рдЧрднрдЧ
@asteppke рдкрд╣рд▓рд╛ рдпрд╛ рджреВрд╕рд░рд╛ рдмреНрд▓реЙрдХ?
@tacaswell рдЖрдкрдХреЗ рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб ( %matplotlib inline
) рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдЦрдкрдд 1.7GB рддрдХ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрдм рджреВрд╕рд░рд╛ рдЯреБрдХрдбрд╝рд╛ ( matplotlib.use('agg')
) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ 50 рдПрдордмреА рдФрд░ 100 рдПрдордмреА рдХреЗ рдмреАрдЪ рд╣реЛрддрд╛ рд╣реИред
рджреЛрдиреЛрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рдпрдерди 3.4 рдФрд░ рдЖрдИрдкреАрдереЙрди рдиреЛрдЯрдмреБрдХ рд╕рдВрд╕реНрдХрд░рдг 4.0.5 рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдФрд░ рдЦреЗрд▓рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ @tacaswell рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ gc.collect()
рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдбреНрд░реЙрдк рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИред
рдХреНрдпрд╛ рд╣рдорд╛рд░рд╛ рдХреЛрдб matplotlib рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ _pylab_helpers.Gcf
рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рджрд┐рдЦ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдкрд░ рдкрдХрдбрд╝ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЙрд╕ рдкрд░ gc.get_referrers()
рдХреЙрд▓ рдХрд┐рдпрд╛; рд╕рдВрджрд░реНрдн рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ user_ns рдореЗрдВ рдерд╛, рдЕрдиреНрдп рд╕рднреА mpl рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рдереЗ - рд╕рдВрднрд╡рддрдГ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╕рдВрджрд░реНрдн рдЫреЛрд░реЛрдВ рдореЗрдВ рд╣реИрдВред рдХреНрдпрд╛ рд╡рд╕реНрддреБ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдФрд░ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рдВрджрд░реНрдн рд░рдЦрддреЗ рд╣реБрдП рд╣реЛрдЧрд╛?
рдореИрдВ рдЗрд╕реЗ 'рдЗрдЪреНрдЫрд╛ рд╕реВрдЪреА' рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд▓рд╣рд╛рд▓ рд╣рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрдЧ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рдФрд░ рдкреНрд░рдЧрддрд┐ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬ рдХреЛ рд░реЛрдХрдирд╛ рдЙрдЪрд┐рдд рд╣реИред
рдЬреЛ рднреА рдкреНрд░рдЧрддрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЙрд╕реЗ рдмреНрд░рд╛рдЙрдиреА рдкреЙрдЗрдВрдЯреНрд╕ рдорд┐рд▓рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА рдХреЗрдХ рднреАред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдореГрддрд┐ рдХрд░реНрдиреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдХрд╣реАрдВ рдЦреЛ рдЧрдИ рд▓рдЧрддреА рд╣реИред рд▓реВрдк рдХреА рдорджрдж рдХреЗ рдмрд╛рдж рдпрд╛ рдЕрдВрджрд░ gc.collect()
рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ summary.print_(summary.summarize(muppy.get_objects()))
рд▓реАрдХ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИред рди рддреЛ рд╕рднреА _N
рдФрд░ _iN
рд╕реЗ None
рдорджрдж рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд╣рд╕реНрдпрдордп рд╣реИред
рдореБрдЭреЗ рдпрд╣ рднреА рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрдХрд▓реНрдкрдиреАрдп рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрди рдкрд░ gc.garbage
рдЕрдВрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рдЙрдирдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рддрдм рднреА рдЦрд╛рд▓реА рд╣реИ рдЬрдм рдореИрдВ рд░реИрдо рдХреЗ рднрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдЗрди рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА-рд▓реЗрд╡рд▓ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореЗрдореЛрд░реА рдХрд┐рд╕ рдЪреАрдЬ рд╕реЗ рдореБрдХреНрдд рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рдпрдерди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдХреЛрдИ рд╕рдмреВрдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХрд╣реАрдВ рднреА рдЬреАрд╡рд┐рдд рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рджреВрд╕рд░рд╛ рд╣реВрдБ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдирд┐рд░реНрдгрдп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред
рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рдХрд┐рд╕реА рдиреЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
+1
+1
BTW, рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдирд╡реАрдирддрдо matplotlib, рдкрд╛рдВрдбрд╛, рдЬреНрдпреВрдкрд┐рдЯрд░, рдЗрдкрд┐рдпрдЯрди рдкрд░ рдорд╛рд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдХреЛрдИ рднреА рдбрд┐рдмрдЧрд░ рдкрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдмрд╣реБ-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЪрд╛рд░ рдХрд╛ рдирд┐рд╡рд╛рд░рдг рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рдпрд╣ рд╢рд╛рдпрдж рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреИрд╢ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдЕрдЪреНрдЫрд╛ рд╕реЛрдЪрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдпрд╣ рдЖрдИрдкреАрдереЙрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд╣реАрдВ рдФрд░
@tacaswell рдХреЗ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рднреВрдЦрдВрдб рднреЗрдЬрдирд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдирдорд╕реНрддреЗ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрд░рд╛рдзреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рдХрд░реЗрдВ!
ipykernel/pylab/backend_inline.py
рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб "рдкреНрд▓реЙрдЯ-рдЪреАрдЬреЛрдВ" рдХрд╛ рдмрд╣реБрдд рднрдВрдбрд╛рд░рдг рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдЯреАрдХ рдХрд╛рд░рдг рдмрддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред
рдпрд╣рд╛рдБ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ (рдКрдкрд░ рджрд┐рдП рдЧрдП @tacaswell рдХреЗ рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░), рдЬреЛ рдХрд┐рд╕реА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
рдЖрд░рдВрдн:
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker
%matplotlib inline
matplotlib.rcParams['figure.figsize'] = (24, 6)
matplotlib.rcParams['figure.dpi'] = 150
from resource import getrusage
from resource import RUSAGE_SELF
def friendlyPlot():
fig, ax = plt.subplots()
ax.plot(range(1000))
fig.savefig('tmp.png')
plt.close('all')
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг:
print("before any: {:7d} kB".format(getrusage(RUSAGE_SELF).ru_maxrss))
friendlyPlot()
print("before loop: {:7d} kB".format(getrusage(RUSAGE_SELF).ru_maxrss))
for i in range(50):
friendlyPlot()
print("after loop: {:7d} kB".format(getrusage(RUSAGE_SELF).ru_maxrss))
import gc ; gc.collect(2)
print("after gc: {:7d} kB".format(getrusage(RUSAGE_SELF).ru_maxrss))
рд▓реВрдк рдХреЗ 50 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛, рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:
before any: 87708 kB
before loop: 106772 kB
after loop: 786668 kB
after gc: 786668 kB
рд▓реВрдк рдХреЗ 200 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛, рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:
before any: 87708 kB
before loop: 100492 kB
after loop: 2824316 kB
after gc: 2824540 kB
рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдореЗрдВ рд▓рдЧрднрдЧ рд░реИрдЦрд┐рдХ рд╡реГрджреНрдзрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдЕрдм рдлрд┐рдХреНрд╕ / рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб: рдЯреЗрд╕реНрдЯ-рд╕реНрдирд┐рдкреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ matplotlib.interactive(False)
рдХреЙрд▓ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред
50 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде:
before any: 87048 kB
before loop: 104992 kB
after loop: 241604 kB
after gc: 241604 kB
рдФрд░ 200 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде:
before any: 87536 kB
before loop: 103104 kB
after loop: 239276 kB
after gc: 239276 kB
рдЬреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░рдВрддрд░ рд╡реГрджреНрдзрд┐ (рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░) рдмрдЪреА рд╣реБрдИ рд╣реИред
рдЗрди рдирдВрдмрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдкреНрд░рддрд┐ рд░рд┐рд╕рд╛рд╡ рд░рд┐рд╕рд╛рд╡ рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдореЛрдЯрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реВрдВ:
(786668-(241604 - 104992))/50 = 13001.12
(2824316-(241604 - 104992))/200 = 13438.52
рдФрд░ рдкрд╛рд╢ рдХреЗ рдПрдХ рдПрдХрд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ 13560
ред рддреЛ рдкреНрд░рддрд┐ рд░рд┐рд╕рд╛рд╡ рд░рд┐рд╕рд╛рд╡ рдХреА рдорд╛рддреНрд░рд╛ рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдХрдо рд╣реИ, рдпрд╣ рдХрдЪреНрдЪрд╛ (> 3 рдПрдордмреА) рдпрд╛ рдкреАрдПрдирдЬреА-рд╕рдВрдкреАрдбрд╝рд┐рдд (54KB) рд╣реЛред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдХрд░реНрдиреЗрд▓ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╣реА рд╕реЗрд▓ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рдЫреЛрдЯреЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░реАрдХреНрд╖рдг (рдХреЗрд╡рд▓ рдХреБрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ) рдХреЛ рдЪрд▓рд╛рдирд╛ рдмрд╣реБрдд рдХрдо рд╕реБрд╕рдВрдЧрдд рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдпрд╛ рдПрдХ рдкреИрдЯрд░реНрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░реНрдирд▓ рдХреЗ рдЕрдзрд┐рдХ рдЬреНрдЮрд╛рди рд╡рд╛рд▓рд╛ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рд╕рдордп рдФрд░ рдЬреНрдЮрд╛рди рдХреА рдХрдореА рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛ рд╕рдХреВрдВред
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВ рджреВрд╕рд░рд╛ рд╣реВрдБ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдирд┐рд░реНрдгрдп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред