2010-04-30 48 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

如果您查看修订历史记录,您会看到它们以前有锁,但出于各种原因将它们更改为此方法。