Почему Psyco использует большую память?

Сдайтесь и используйте Шаблонная Система Jinja2

, я разочаровался в шаблонном языке django, она очень ограничивается в том, что можно сделать с нею. Jinja2 использует тот же синтаксис, что шаблонное использование django, но добавляет много улучшений по нему.

РЕДАКТИРОВАНИЕ/ПРИМЕЧАНИЕ (я знаю, это походит на большой переключатель для просто незначительной проблемы, но в действительности я держал пари, что Вы всегда боретесь с шаблонной системой по умолчанию в django, таким образом, это действительно стоит, и я полагаю, что это сделает Вас более продуктивными в конечном счете.)

можно читать эта статья, написанная ее автором , хотя это является техническим, он упоминает проблему {% цикла %} тег в django.

Джинджа не имеет тега цикла, она имеет метод цикла на цикле:

{% for user in users %}
    
  • {{ user }}
  • {% endfor %}

    А главное преимущество Jinja2 состоит в том, что это позволяет Вам использовать логику для представления, поэтому если у Вас есть список изображений, можно поместить их в таблицу, потому что можно запустить новую строку в таблице каждый элементы N, посмотрите, можно сделать, например:

    {% if loop.index is divisibleby(5) %}   
         
         {% if not loop.last %}
         
         {% endif %}
    {% endif %}
    

    можно также использовать математические выражения:

    {% if x > 10 %}
    

    и можно получить доступ функциям Python непосредственно (но некоторая установка требуется, чтобы определять, какие функции должны быть представлены для шаблона)

    {% for item in normal_python_function_that_returns_a_query_or_a_list() %}
    

    даже переменные набора..

    {% set variable_name = function_that_returns_an_object_or_something() %} 
    

    5
    задан ire_and_curses 21 September 2009 в 09:46
    поделиться

    4 ответа

    С веб-сайта psyco «Отличие от традиционного подхода к JIT-компиляторам состоит в том, что Psyco записывает несколько версий одних и тех же блоков (блок - это что-то вроде функции), которые оптимизированы, специализируясь на некоторых типах переменных («вид» может означать тип, но он является более общим) »

    10
    ответ дан 18 December 2019 в 08:29
    поделиться

    «Psyco использует фактические данные времени выполнения, с которыми ваша программа манипулирует потенциально написать несколько версий машинного кода, каждая из которых по-своему специализирована для разных типов данных ». http://psyco.sourceforge.net/introduction.html

    Многие JIT-компиляторы работают со статически типизированными языками, поэтому они знают, что это за типы, поэтому могут создавать машинный код только для известных типов. Лучшие из них выполняют динамическое профилирование, если типы полиморфны, и оптимизируют наиболее часто встречающиеся пути; это также обычно делается с языками с динамическими типами †. Psyco, похоже, хеджирует свои ставки, чтобы избежать проведения полного анализа программы, чтобы решить, какие типы могут быть, или профилирования, чтобы найти, какие типы используются.

    † Я никогда не углублялся в Python, чтобы понять, есть ли у него динамические типы или нет (типы, структура которых может быть изменена во время выполнения после того, как объекты были созданы с этим типом), или просто общие реализации проверяют типы только во время выполнения; большинство статей просто восхищаются динамической типизацией, не определяя ее в контексте Python.

    5
    ответ дан 18 December 2019 в 08:29
    поделиться

    В настоящее время Psyco имеет большие накладные расходы на память. Со временем меня немного уменьшили, но это все еще накладные расходы. Эти накладные расходы пропорциональны объему кода Python, который переписывает Psyco ; таким образом, если ваше приложение имеет несколько алгоритмических «основных» функций, вам нужно, чтобы Psyco ускорял именно эти функции - а не всю программу.

    Так что я думаю, что большие требования к памяти связаны с тем, что она загружается исходный код в память, а затем компилировать его по мере необходимости. Чем больше исходников вы попытаетесь скомпилировать, тем больше потребуется. Я предполагаю, что если он попытается оптимизировать это вдобавок к этому, он рассмотрит несколько возможных решений, чтобы попытаться определить лучший вариант.

    2
    ответ дан 18 December 2019 в 08:29
    поделиться

    Определенно, использование памяти psyco происходит из скомпилированных блоков ассемблера. Psyco иногда страдает чрезмерной специализацией функций, что означает, что существует несколько версий ассемблера. блоки. Также, что также очень важно, psyco никогда не освобождает однажды выделенные блоки ассемблера. даже если связанный с ним код мертв.

    Если вы запускаете свою программу под Linux, вы можете посмотреть / proc / xxx / smaps, чтобы увидеть растущий блок анонимной памяти, который находится в другом регионе, чем куча. Это анонимно созданная mmap часть для записи ассемблера, которая, конечно же, исчезает при работе без psyco.

    2
    ответ дан 18 December 2019 в 08:29
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: