Сборку мусора Python может быть такой медленной?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сборку мусора Python может быть такой медленной?

Сообщение Anonymous »

У меня есть проблема с моим приложением Python, и я думаю, что это связано с коллекцией мусора Python, хотя я не уверен ...
Проблема в том, что мое приложение требует много времени для выхода и для перехода на одну функцию на следующую. /> Я вкладываю несколько выходов на временные метки в свою программу, и я увидел, что в конце каждой функции, когда объекты, создаваемые внутри функции, должны выходить из области, интерпретатор тратится на следующую функцию. И я наблюдаю за той же проблемой в конце приложения, когда программа должна выходить: много времени (~ часы!) Проводятся между последней меткой времени на экране и появлением свежей подсказки. Объекты, которые медленные?
Есть ли метод ускорения? Enterprise 5.
И на самом деле я не использую SWIG, чтобы получить привязки Python для нашего кода C ++, но платформу Reflex /Pyroot. Я знаю, что это не очень известная физика внешней частиц (но все еще открытый исходный код и свободно доступен), и я должен использовать ее, потому что это по умолчанию для нашей основной структуры. DEL только удаляет переменную Python, связанную с объектом C ++, а не сам объект в памяти, которая до сих пор принадлежит стороне C ++ ...
... Я знаю, это не Standard, я думаю, и немного сложный, извините: p
Но следуя за вашим хинтом, я буду профилю код и я вернусь к вам, с помощью вас, на подключении. /> Дополнительное обновление:
ОК, следуя вашим предложениям, я включил свой код с помощью cprofile , и я обнаружил, что на самом деле функция gc.collect () - это функция, которая принимает наибольшую времени выполнения !! print_stats (): < /p>

Код: Выделить всё

>>> p.sort_stats("time").print_stats(20)
Wed Oct 20 17:46:02 2010    mainProgram.profile

547303 function calls (542629 primitive calls) in 548.060 CPU seconds

Ordered by: internal time
List reduced from 727 to 20 due to restriction 

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
4  345.701   86.425  345.704   86.426 {gc.collect}
1  167.115  167.115  200.946  200.946 PlotD3PD_v3.2.py:2041(PlotSamplesBranches)
28   12.817    0.458   13.345    0.477 PlotROOTUtils.py:205(SaveItems)
9900   10.425    0.001   10.426    0.001 PlotD3PD_v3.2.py:1973(HistoStyle)
6622    5.188    0.001    5.278    0.001 PlotROOTUtils.py:403(__init__)
57    0.625    0.011    0.625    0.011 {built-in method load}
103    0.625    0.006    0.792    0.008 dbutils.py:41(DeadlockWrap)
14    0.475    0.034    0.475    0.034 {method 'dump' of 'cPickle.Pickler' objects}
6622    0.453    0.000    5.908    0.001 PlotROOTUtils.py:421(CreateCanvas)
26455    0.434    0.000    0.508    0.000 /opt/root/lib/ROOT.py:215(__getattr__)
[...]

>>> p.sort_stats("cumulative").print_stats(20)
Wed Oct 20 17:46:02 2010    mainProgram.profile

547303 function calls (542629 primitive calls) in 548.060 CPU seconds

Ordered by: cumulative time
List reduced from 727 to 20 due to restriction 

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
1    0.001    0.001  548.068  548.068 PlotD3PD_v3.2.py:2492(main)
4    0.000    0.000  346.756   86.689 /usr/lib//lib/python2.5/site-packages/guppy/heapy/Use.py:171(heap)
4    0.005    0.001  346.752   86.688 /usr/lib//lib/python2.5/site-packages/guppy/heapy/View.py:344(heap)
1    0.002    0.002  346.147  346.147 PlotD3PD_v3.2.py:2537(LogAndFinalize)
4  345.701   86.425  345.704   86.426 {gc.collect}
1  167.115  167.115  200.946  200.946 PlotD3PD_v3.2.py:2041(PlotBranches)
28   12.817    0.458   13.345    0.477 PlotROOTUtils.py:205(SaveItems)
9900   10.425    0.001   10.426    0.001 PlotD3PD_v3.2.py:1973(HistoStyle)
13202    0.336    0.000    6.818    0.001 PlotROOTUtils.py:431(PlottingCanvases)
6622    0.453    0.000    5.908    0.001 /root/svn_co/rbianchi/SoftwareDevelopment

[...]

>>>
Таким образом, в обоих выходах, отсортированных по «времени» и по «кумулятивному» времени соответственно, gc.collect () - это функция, потребляющая максимальную от времени работы моей программы! :-P
И это вывод профилировщика памяти Hepy , непосредственно перед возвратом main () программа.

Код: Выделить всё

memory usage before return:
Partition of a set of 65901 objects.  Total size = 4765572 bytes.
Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
0  25437  39  1452444  30   1452444  30 str
1   6622  10   900592  19   2353036  49 dict of PlotROOTUtils.Canvas
2    109   0   567016  12   2920052  61 dict of module
3   7312  11   280644   6   3200696  67 tuple
4   6622  10   238392   5   3439088  72 0xa4ab74c
5   6622  10   185416   4   3624504  76 PlotROOTUtils.Canvas
6   2024   3   137632   3   3762136  79 types.CodeType
7    263   0   129080   3   3891216  82 dict (no owner)
8    254   0   119024   2   4010240  84 dict of type
9    254   0   109728   2   4119968  86 type
  Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
10   1917   3   107352   2   4264012  88 function
11   3647   5   102116   2   4366128  90 ROOT.MethodProxy
12    148   0    80800   2   4446928  92 dict of class
13   1109   2    39924   1   4486852  93 __builtin__.wrapper_descriptor
14    239   0    23136   0   4509988  93 list
15     87   0    22968   0   4532956  94 dict of guppy.etc.Glue.Interface
16    644   1    20608   0   4553564  94 types.BuiltinFunctionType
17    495   1    19800   0   4573364  94 __builtin__.weakref
18     23   0    11960   0   4585324  95 dict of guppy.etc.Glue.Share
19    367   1    11744   0   4597068  95 __builtin__.method_descriptor

Есть идеи, почему, или как оптимизировать сбор мусора?
Есть ли более подробная проверка, которую я могу сделать?

Подробнее здесь: https://stackoverflow.com/questions/391 ... -that-slow
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Что может быть причиной такой медленной работы представления дизайна?
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Попытка понять сборку мусора PHP [дублировать]
    Anonymous » » в форуме Php
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Зачем вручную запрашивать сборку мусора в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Какие объекты имеют право на сборку мусора, пока программа печатает? [дублировать]
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как настроить сборку мусора для пула приложений ASP.NET 4.8 IIS?
    Anonymous » » в форуме C#
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»