2010-05-26 1 views
1

Я запускаю приложение TG2 на lighttpd через flup/fastcgi. Мы читаем изображения (~ 30kb каждый) из BlobFields в базе данных MySQL и возвращаем эти изображения с пользовательским типом mime с помощью метода контроллера. Кэширование этих изображений на жестком диске бессмысленно, потому что они меняются с каждым запросом, единственная причина, по которой мы их кэшируем в БД, заключается в том, что создание этих изображений довольно дорого, а данные, используемые для создания изображений, также представлены в виде простого текста на Веб-сайт.Возвращение базы данных Blobs в TurboGears 2.x/FCGI/Lighttpd очень медленно

Теперь сама проблема:

При возврате такого образа, вещи становятся очень медленно. Код полностью работает на самом пастере, без видимой задержки, но как только он запускается через fcgi/lighttpd, описанное явление происходит.

Я профилировал метод моего контроллера, который возвращает мой blob, и весь метод запускается за несколько миллисекунд, но когда выполняется «возврат», все приложение висит примерно на 10 секунд.

Мы не смогли воспроизвести ту же ошибку с PHP на FCGI. Это, похоже, происходит только с 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 

ответ

0

Я понятие не, на самом деле, но, видя, как нет ответов здесь, я попытаюсь дикое предположение.

Возможно

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

бы помочь?

Смежные вопросы