国产探花免费观看_亚洲丰满少妇自慰呻吟_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標準是不保證這個假設的。
盡可能使用數據庫系統

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 印江| 北宁市| 鸡泽县| 云安县| 黔西县| 东莞市| 上蔡县| 涿州市| 安徽省| 潼南县| 宣武区| 木兰县| 禹城市| 兴化市| 唐山市| 江源县| 廊坊市| 高青县| 库车县| 沾化县| 行唐县| 穆棱市| 铜川市| 和林格尔县| 鹤岗市| 罗平县| 郓城县| 临武县| 理塘县| 安泽县| 纳雍县| 项城市| 上蔡县| 南汇区| 当涂县| 尼玛县| 应用必备| 玉溪市| 平乐县| 日喀则市| 澄城县|