stream
  • zip
  • cherrypy
  • 2012-05-10 32 views 2 likes 
    2

    我有這樣的代碼 (飛壓縮和流)CherryPy的服務於多個請求/每連接

    @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} 
    

    我所面臨的問題是,當我下載文件我不能瀏覽任何其他網頁或發送任何其他請求,直到下載完成... 我認爲問題是,櫻桃不能一次服務多個請求/每個用戶

    任何建議?

    回答

    6

    當你「每用戶」說,你的意思是另一個請求能不能進去不同的「會話」,它會繼續下去?

    在這種情況下,您的問題幾乎可以肯定是由於CherryPy的會話鎖定。你可以閱讀更多關於它的是session code。由於會話在默認情況下被延遲解鎖,因此當備份仍在處理中時,會話不可供其他線程(連接)使用。

    嘗試在_cp_config爲處理程序中設置tools.sessions.locking = 'explicit'。由於你沒有寫任何會話,因此可能不會鎖定。

    祝你好運。希望有所幫助。

    +0

    這正是我所需要的!非常感謝您的幫助,併爲您的即時響應! – goten002

    +0

    又一個很好的提示:http://blog.schmichael.com/2007/09/20/session-locking-and-performance-in-cherrypy/你可以簡單地釋放會話日誌,當通過發行不需要anmyore CherryPy的' .session.release_lock()' – devsnd

    0

    此外,從FAQ:。

    「的CherryPy當然可以處理多個連接,通常是你的瀏覽器是罪魁禍首火狐,例如,將只開一次兩個相同的主機(連接和如果其中之一是爲favicon.ico的,然後你到一個)。嘗試增加你的瀏覽器使得併發連接數,或提供一個工具,不是一個瀏覽器,如圍城,Apache的AB測試你的網站,甚至捲曲。「

    相關問題