flup/fastcgi を介して lighttpd で TG2 アプリを実行しています。MySQL データベースの BlobFields から画像 (それぞれ約 30kb) を読み取り、コントローラー メソッドを介してカスタム MIME タイプでそれらの画像を返します。これらの画像はリクエストごとに変更されるため、ハード ディスクにキャッシュすることは意味がありません。DB にこれらをキャッシュする唯一の理由は、これらの画像の作成には非常にコストがかかり、画像の作成に使用されるデータもプレーン テキストで存在するためです。 Webサイト。
さて、問題自体に:
そのような画像を返すと、物事は非常に遅くなります。コードは、paster 自体では目に見える遅延なく完全に正常に実行されますが、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