1

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
4

1 に答える 1

0

本当に手がかりはありませんが、ここに答えがないので、大げさな推測をしてみます。

多分

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

役立つだろう?

于 2010-07-07T21:46:05.933 に答える