我正在通过 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