在TurboGears 2.x / FCGI / Lighttpd中返回数据库Blob非常慢

时间:2010-05-26 09:59:49

标签: python pylons fastcgi turbogears

我通过flup / fastcgi在lighttpd上运行TG2应用程序。 我们正在从MySQL数据库中的BlobFields读取图像(每个~30kb),并通过控制器方法返回具有自定义mime类型的图像。将这些图像缓存在硬盘上没有任何意义,因为它们随着每个请求而变化,我们在数据库中缓存这些图像的唯一原因是创建这些图像非常昂贵,用于创建图像的数据也以纯文本形式出现在网站。

现在问题本身:

当返回这样的图像时,事情变得极其缓慢。代码在贴纸本身上运行完全正常,没有明显的延迟,但是一旦通过fcgi / lighttpd运行,就会发生所描述的现象。

我描述了我的控制器返回我的blob的方法,整个方法在几毫秒内运行,但是当“返回”执行时,整个应用程序挂起大约10秒钟。

我们无法在FCGI上使用PHP重现相同的错误。这似乎只发生在Turbogears或Pylons上。

供您考虑相关的源代码:

@expose(content_type=CUSTOM_CONTENT_TYPE)
def return_img(self, img_id):
    """ Return a DB persisted image when requested """

    img = model.Images.by_id(img_id) #get image from DB
    response.headers['content-type'] = 'image/png'
    return img.data # this causes the app to hang for 10 seconds

1 个答案:

答案 0 :(得分:0)

我真的不知道,但是看到这里没有答案,我会尝试一下。

也许

response.headers['content-length'] = len(img.data)

会有帮助吗?