2010-05-26 17 views
1

J'utilise une application TG2 sur lighttpd via flup/fastcgi. Nous lisons des images (environ 30 Ko chacun) de BlobFields dans une base de données MySQL et restituons ces images avec un type MIME personnalisé via une méthode de contrôleur. La mise en cache de ces images sur le disque dur n'a aucun sens car elles changent à chaque requête, la seule raison pour laquelle nous les mettons en cache est que la création de ces images est assez coûteuse et que les données utilisées pour créer les images sont également présentes site Internet.Retour des blobs de base de données dans TurboGears 2.x/FCGI/Lighttpd extrêmement lent

Maintenant, le problème lui-même:

Lors du retour d'une telle image, les choses deviennent extrêmement lent. Le code fonctionne parfaitement sur le pasteur lui-même, sans délai visible, mais dès qu'il s'exécute via fcgi/lighttpd, le phénomène décrit se produit. J'ai profilé la méthode de mon contrôleur qui renvoie mon blob, et la méthode entière s'exécute en quelques millisecondes, mais quand "retour" s'exécute, l'application entière se bloque pendant environ 10 secondes.

Nous n'avons pas pu reproduire la même erreur avec PHP sur FCGI. Cela semble seulement arriver avec Turbogears ou Pylons.

ici pour votre compte de la pièce concernée du code source:

@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 

Répondre

0

Je n'ai pas la moindre idée, vraiment, mais vu qu'il n'y a pas de réponse ici, je vais essayer de deviner sauvage.

Peut-être

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

aiderait?