2012-05-10 9 views
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

「1人のユーザー」と言うと、別の「セッション」に対して別のリクエストが送信され、続行が許可されるということですか?

この場合、問題はほとんどの場合、cherrypyのセッションロックが原因です。それについての詳細はsession codeです。セッションはデフォルトでは遅くロック解除されるため、バックアップがまだ処理されている間は、セッションは他のスレッド(接続)で使用できません。

そのハンドラの_cp_configにtools.sessions.locking = 'explicit'を設定してみてください。あなたはセッションに何も書いていないので、まったくロックしないのがおそらく安全です。

幸運。希望が役立ちます。 FAQからも

+0

これは私が必要とするものです。お返事ありがとうございます。 – goten002

+0

もう一つの良いヒント:http://blog.schmichael.com/2007/09/20/session-locking-and-performance-in-cherrypy/セッションログを公開することもできます。必要でない場合は、 'cherrypy .session.release_lock() ' – devsnd

0

、:

「CherryPyには確かに複数の接続を処理することができますが、通常犯人であるブラウザのFirefoxは、例えば、唯一の同じホストに一度に2つの接続を開きます(と。もしそれらのどれかがfavicon.icoのものであれば、あなたは1つに減ります)。ブラウザが同時に行う接続の数を増やしてみるか、ブラウザではないツールを使ってあなたのサイトをテストしてください。 、またはカールします。

関連する問題