2012-05-10 5 views
2

j'ai ce code (sur la compression et flux mouche)cherrypy servir plusieurs demandes/par connexion

@cherrypy.expose 
def backup(self): 
    path = '/var/www/httpdocs' 
    zip_filename = "backup" + t.strftime("%d_%m_%Y_") + ".zip" 

    cherrypy.response.headers['Content-Type'] = 'application/zip' 
    cherrypy.response.headers['Content-Disposition'] = 'attachment; filename="%s"' % (zip_filename,) 

    #https://github.com/gourneau/SpiderOak-zipstream/blob/3463c5ccb5d4a53fc5b2bdff849f25bae9ead761/zipstream.py 
    return ZipStream(path) 

backup._cp_config = {'response.stream': True} 

le problème que je pose est quand je télécharge le fichier je ne peux pas parcourir toute autre page ou envoyer toute autre demande jusqu'à ce que le téléchargement soit fait ... je pense que le problème est que cherrypy ne peut pas servir plus d'une demande à la fois/par utilisateur

une suggestion?

Répondre

6

Lorsque vous dites "par utilisateur", voulez-vous dire qu'une autre requête pourrait être introduite pour une "session" différente et qu'elle serait autorisée à continuer?

Dans ce cas, votre problème est presque certainement dû au verrouillage de session dans cherrypy. Vous pouvez en lire plus sur le session code. Étant donné que les sessions sont déverrouillées tardivement par défaut, la session n'est pas disponible pour être utilisée par d'autres threads (connexions) pendant que la sauvegarde est en cours de traitement.

Essayez de définir tools.sessions.locking = 'explicit' dans _cp_config pour ce gestionnaire. Puisque vous n'écrivez rien à la session, il est probablement prudent de ne pas le verrouiller du tout.

Bonne chance. J'espère que cela pourra aider.

+0

C'est exactement ce dont j'ai besoin! Merci beaucoup pour votre aide et pour votre réponse immédiate! – goten002

+0

encore un autre bon indice: http://blog.schmichael.com/2007/09/20/session-locking-and-performance-in-cherrypy/ vous pouvez simplement libérer le journal de session, quand pas nécessaire anmyore en émettant 'cherrypy .session.release_lock() ' – devsnd

0

En outre, à partir du FAQ:..

« CherryPy peut certainement gérer plusieurs connexions Il est généralement votre navigateur qui est le coupable Firefox, par exemple, ne fera que deux connexions ouvertes à la fois pour le même hôte (et Si l'un de ceux-ci est pour le favicon.ico, alors vous êtes à un.) Essayez d'augmenter le nombre de connexions simultanées de votre navigateur, ou testez votre site avec un outil qui n'est pas un navigateur, comme le siège, Apache ab ou même friser. "