2011-02-08 46 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的會話對象。它使用數據庫或文件來存儲可以跨不同線程或進程訪問的數據。

web.py session example

+0

有沒有辦法在會話中存儲自定義數據?我似乎無法找到如何檢索給定用戶的請求中的會話。 – seadowg 2011-02-08 09:09:50