Ipython: % Matplotlib рдЗрдирд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рд▓реАрдХ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рджрд┐рд╕ре░ 2014  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ipython/ipython

рдЬрд╝рд░рд╛ рд╕реБрдирд┐рдП рд╕рднреА

рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рд╣реИред рдмрд╕ рдХреЛрдб рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдореЗрдореЛрд░реА рджреЗрдЦреЗрдВред рдлрд┐рд░ "% 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()

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рджреВрд╕рд░рд╛ рд╣реВрдБ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдирд┐рд░реНрдгрдп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

рд╕рднреА 23 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдЗрд╕ рдмрдЧ рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рдмрд┐рдирд╛ рдЗрдирд▓рд╛рдЗрди рдкреНрд▓реЙрдЯ рдкрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рдгрд┐рдпрд╛рдВ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реИрдВред

рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдврд╝рдиреЗ рдкрд░ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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 рдкрд╛рдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрджреНрджрд╛ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

https://github.com/pydata/pandas/pull/9814

рдмрд╣реБрдд рдмрд╣реБрдд рд╢реБрдХреНрд░рд┐рдпрд╛ред рдореВрд▓ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкрд╛рдВрдбрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд░рд▓рддрд╛ рд╕реЗ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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) рд╣реЛред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдХрд░реНрдиреЗрд▓ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╣реА рд╕реЗрд▓ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рдЫреЛрдЯреЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░реАрдХреНрд╖рдг (рдХреЗрд╡рд▓ рдХреБрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ) рдХреЛ рдЪрд▓рд╛рдирд╛ рдмрд╣реБрдд рдХрдо рд╕реБрд╕рдВрдЧрдд рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдпрд╛ рдПрдХ рдкреИрдЯрд░реНрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░реНрдирд▓ рдХреЗ рдЕрдзрд┐рдХ рдЬреНрдЮрд╛рди рд╡рд╛рд▓рд╛ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рд╕рдордп рдФрд░ рдЬреНрдЮрд╛рди рдХреА рдХрдореА рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛ рд╕рдХреВрдВред

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

gregcaporaso picture gregcaporaso  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hexhexd picture hexhexd  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sataliulan picture sataliulan  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

okomarov picture okomarov  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ipython picture ipython  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ