2011-02-08 16 views
0

ファイルをアップロードするためのweb.pyアプリケーションで作業しています。展開に実際の問題があります。基本的には、ユーザーに「アップロードされたパーセンテージ」を与えたいと思いますが、これはmod_wsgiにデプロイされたときにひどく混乱しているようです。メインアップロードは次のように動作します。web.py + mod_wsgiファイルのアップロードで問題が発生する

out = open(path, 'wb', 1000) 

    while (True): 

     packet = fileU.file.read(1000) 

     if not packet: 

      break 

     else: 

      out.write(packet) 
      sessions[code].progress += 1 

    out.close() 

'セッション'は、セッションを追跡するオブジェクトを含むグローバル辞書です。現在の進捗状況を取得するには、毎秒クライアントからのGETリクエストを使用して、特定のセッションの現在の進捗状況を取得します。

現時点での問題は、これは小さなアップロードでのみ機能することです。約100kbを超えるものは進捗変数を増加させないようです。この値は、ループの外側に(またはread()が呼び出される前に)配置されている場合、またはファイルがかなり小さい場合には、確実にインクリメントされます。

wsgiが大きなファイルに対して新しいスレッドを開いているため、グローバルカウンタがアップロードスレッドのローカルのみになる可能性はありますか?それは別のものかもしれません。

答えて

2

これにはグローバル辞書を使用することはできません。実際には、Webサーバーが別のスレッドを使用して次の要求を処理している可能性が非常に高く、セッション辞書が同じであるという保証はありません。 web.pyの一部であるセッションオブジェクトを使用してみてください。これは、dbまたはファイルのいずれかを使用して、異なるスレッドまたはプロセス間でアクセスできるデータを格納します。

web.py session example

+0

セッションにカスタムデータを保存する方法はありますか。また、特定のユーザーの要求でセッションを取得する方法を見つけることができないようです。 – seadowg

+0

セッションオブジェクトには基本的にdictインターフェイスがあり、好きなデータを格納できるはずです。たとえば、あるリクエストに対して[]というセッションを設定すると、別のリクエストでセッション[]を取得できるはずです。あなたは多かれ少なかれ、*本当に*グローバルな辞書と考えることができます。 – d0nut

関連する問題