加快Tornado模板中的循环

时间:2014-07-27 07:23:15

标签: python tornado cython pypy numba

是否可以使用Cython,PyPy或Numba加速模板中的循环?

{% for student in [p for p in people if p.student and p.age > 23] %}
  <li>{{ escape(student.name) }}</li>
{% end %}

如果循环可以更快地进行模板渲染,我的目的就是尝试。

Numba中的某些内容可以像

一样进行尝试
def python_sum(y):
    N = len(y)
    x = y[0]
    for i in xrange(1,N):
        x += y[i]
    return x

numba_sum = autojit()(python_sum)
numba_sum.func_name = "numba_sum"

如果尝试将模板作为函数传递,则会失败。

文件“C:\ Python27 \ lib \ site-packages \ numba \ dispatcher.py”,第123行,在_compile_and_call中断言不是kws AssertionError; 当我将模板称为函数

时,错误抛出

1 个答案:

答案 0 :(得分:1)

如果您在pypy中运行服务器,模板也会加速。由于模板代码是动态生成的,因此将cython用于模板是不可行的。我不熟悉numba,但是从错误消息来看,它看起来并不支持龙卷风模板广泛使用的**kwargs构造。 Cython有一个选项always_allow_keywords;如果numba有更简单的东西你可以使用它,但如果没有它可能不会工作。