2

私はこのコードを持っています(オンザフライ圧縮とストリーム)

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

私が直面した問題は、ファイルをダウンロードしているときに、ダウンロードが完了するまで他のページを閲覧したり、他のリクエストを送信したりできないことです...問題は、cherrypyが一度に複数のリクエストを処理できないことだと思います/ユーザーごと

なにか提案を?

4

2 に答える 2

6

「ユーザーごと」とは、別の「セッション」に対して別のリクエストが来る可能性があり、続行できるという意味ですか?

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

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

幸運を。それが役立つことを願っています。

于 2012-05-10T12:57:56.883 に答える
0

また、FAQから:

「CherryPyは確かに複数の接続を処理できます。通常、原因はブラウザです。たとえば、Firefoxは、同じホストに対して一度に2つの接続しか開きません(そのうちの1つがfavicon.icoの場合、あなたは」ブラウザが作成する同時接続の数を増やすか、siege、Apacheのab、さらにはcurlなどのブラウザではないツールを使用してサイトをテストしてみてください。」

于 2012-05-11T14:07:12.460 に答える