Я запускаю приложение 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