2010-04-30 47 views
0

我今天django.contrib.sessions.backend.file讀,在SessionStoresave方法也有一些是因爲以下這是我們用來實現多線程節能完整性:Django1.1文件基於會話後臺多線程解決方案

 output_file_fd, output_file_name = tempfile.mkstemp(dir=dir, 
      prefix=prefix + '_out_') 
     renamed = False 
     try: 
      try: 
       os.write(output_file_fd, self.encode(session_data)) 
      finally: 
       os.close(output_file_fd) 
      os.rename(output_file_name, session_file_name) 
      renamed = True 
     finally: 
      if not renamed: 
       os.unlink(output_file_name) 

我不不太瞭解這是如何解決完整性問題的。

回答

0

從技術上講,這並不能完全解決完整性問題。 #9084解決此問題。

本質上這是通過使用tempfile.mkstemp確保是原子性的,並將數據寫入該文件。然後它調用os.rename(),將臨時文件重命名爲新文件。在unix中,這將在重命名之前刪除舊文件,在Windows中會引發錯誤。這應該爲django修復1.1

如果您查看修訂歷史記錄,您會看到它們以前有鎖,但出於各種原因將它們更改爲此方法。