国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python進行穩定可靠的文件操作詳解

2020-02-23 05:04:06
字體:
來源:轉載
供稿:網友

考慮下述Python代碼片段。對文件中的數據進行某些操作,然后將結果保存回文件中:

代碼如下:
with open(filename) as f:
   input = f.read()
output = do_something(input)
with open(filename, 'w') as f:
   f.write(output)

看起來很簡單吧?可能看起來并不像乍一看這么簡單。我在產品服務器中調試應用,經常會出現奇怪的行為。
這是我看過的失效模式的例子:
失控的服務器進程溢出大量日志,磁盤被填滿。write()在截斷文件之后拋出異常,文件將會變成空的。
應用的幾個實例并行執行。在各個實例結束之后,因為混合了多個實例的輸出,文件內容最終變成了天書。
在完成了寫操作之后,應用會觸發一些后續操作。幾秒鐘后斷電。在我們重啟了服務器之后,我們再一次看到了舊的文件內容。已經傳遞給其它應用的數據與我們在文件中看到的不再一致。
下面沒有什么新的內容。本文的目的是為在系統編程方面缺少經驗的Python開發者提供常見的方法和技術。我將會提供代碼例子,使得開發者可以很容易的將這些方法應用到自己的代碼中。
“可靠性”意味著什么?
廣義的講,可靠性意味著在所有規定的條件下操作都能執行它所需的函數。至于文件的操作,這個函數就是創建,替換或者追加文件的內容的問題。這里可以從數據庫理論上獲得靈感。經典的事務模型的ACID性質作為指導來提高可靠性。
開始之前,讓我們先看看我們的例子怎樣和ACID4個性質扯上關系:
原子性(Atomicity)要求這個事務要么完全成功,要么完全失敗。在上面的實例中,磁盤滿了可能導致部分內容寫入文件。另外,如果正當在寫入內容時其它程序又在讀取文件,它們可能獲得是部分完成的版本,甚至會導致寫錯誤
一致性(Consistency) 表示操作必須從系統的一個狀態到另一個狀態。一致性可以分為兩部分:內部和外部一致性。內部一致性是指文件的數據結構是一致的。外部一致性是指文件的內容與它相關的數據是相符合的。在這個例子中,因為我們不了解這個應用,所以很難推斷是否符合一致性。但是因為一致性需要原子性,我們至少可以說沒有保證內部一致性。
隔離性(Isolation)如果在并發的執行事務中,多個相同的事務導致了不同的結果,就違反了隔離性。很明顯上面的代碼對操作失敗或者其它隔離性失敗都沒有保護。
持久性(Durability)意味著改變是持久不變的。在我們告訴用戶成功之前,我們必須確保我們的數據存儲是可靠的并且不只是一個寫緩存。上面的代碼已經成功寫入數據的前提是假設我們調用write()函數,磁盤I/O就立即執行。但是POSIX標準是不保證這個假設的。
盡可能使用數據庫系統

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通河县| 疏附县| 天长市| 昭通市| 西青区| 井陉县| 华池县| 吴川市| 柯坪县| 山东省| 汨罗市| 雅安市| 永川市| 南溪县| 新津县| 疏附县| 南城县| 东乌珠穆沁旗| 古蔺县| 海宁市| 黄大仙区| 建水县| 霍林郭勒市| 皋兰县| 鄂伦春自治旗| 米易县| 改则县| 河津市| 宜春市| 息烽县| 商南县| 来凤县| 民县| 兖州市| 金堂县| 巍山| 嘉兴市| 建德市| 安徽省| 霍林郭勒市| 中阳县|