Кто-нибудь видел Matplotlib утечки файловых дескрипторов (Vera.ttf) на Windows 7 с версией 1.0.1? - PullRequest
4 голосов
/ 17 мая 2011

Я создаю много графиков, которые сохраняются с помощью pylab.savefig, и наблюдаю, что процесс Python заканчивается сотнями файловых дескрипторов для C: \ Python27 \ Lib \ site-packages \ matplotlib \ mpl-data \ fonts \ ttf \ Vera.TTF.В конечном итоге это приводит к сбою процесса из-за слишком большого количества файловых дескрипторов (в этот момент Vera.ttf имеет более 700 дескрипторов, просматриваемых через «Process Explorer»).

В архивах я вижу несколько ссылок на старые утечки в matplotlibно, насколько я могу судить, они должны были быть разрешены в версии 1.0.1.

В моем коде я неоднократно вызываю pylab.close ("all"), а также pylab.close (figure_variable) и figure_variable.clear () пытается получить matplotlib для освобождения ресурсов.

Для справки, я использую последнюю версию дистрибутива Enthought для 64-битной Windows.Я могу продублировать проблему следующим образом:

for i in range(1000):
    fig = pylab.figure()
    pylab.plot(some_data)
    fig.savefig(filename)
    fig.clear()
    pylab.close(fig)
    if i % 10 == 1: pylab.close("all")

Кто-нибудь знает, как заставить matplotlib либо освободить дескриптор на Vera.ttf, либо избежать повторной загрузки одного и того же файла столько раз?Из того, что я наблюдаю в Process Explorer, фактически создается несколько дескрипторов на график.

1 Ответ

2 голосов
/ 02 апреля 2012

Для решения этой проблемы существует несколько ожидающих запросов извлечения, один из которых перейдет в Matplotlib v1.1.1 (следующий стабильный выпуск): см. # 795 и # 798 для двух альтернатив и участвовать в # 791 , который является темой для тестирования кандидатов на выпуск v1.1.1.

Исправление, подобное предложенному в # 795 был применен к ветке git master 7 месяцев назад, так что если вы на этом, вы больше не должны видеть эту проблему.Единственное предостережение в том, что он использует оператор with, поэтому не будет работать на Python <2.6 </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...