【问题标题】:Returning Database Blobs in TurboGears 2.x / FCGI / Lighttpd extremely slow在 TurboGears 2.x / FCGI / Lighttpd 中返回数据库 Blob 非常慢
【发布时间】:2010-05-26 09:59:48
【问题描述】:

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

现在回到问题本身:

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

我分析了返回我的 blob 的控制器的方法,整个方法在几毫秒内运行,但是当“return”执行时,整个应用程序挂起大约 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

【问题讨论】:

    标签: python pylons fastcgi turbogears


    【解决方案1】:

    我真的不知道,但鉴于这里没有答案,我会尝试一个疯狂的猜测。

    也许

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

    会有帮助吗?

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 2013-08-13
      • 2020-06-22
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2017-02-15
      相关资源
      最近更新 更多