在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ python如何原子地對一個文件進(jìn)行讀后寫操作

python如何原子地對一個文件進(jìn)行讀后寫操作

舉個例子,現(xiàn)在我有一個文件a.txt

a.txt的內(nèi)容為:
aaaaassssssddddddddddd

現(xiàn)在,我想將a.txt中的's'字符替換為'z'字符
一個寫法如下:

# a.py
str = None
with open('a.txt', 'r') as f:
    str = f.readline()
operation_need_many_time()#這是一個費(fèi)時操作

str = str.replace('s','z')
with open('a.txt', 'w') as f:
    f.write(ste)

在沒有其他程序的干擾下,a.py能夠?qū)崿F(xiàn)我需求的功能
但是假設(shè)有b.py,實(shí)現(xiàn)將'd'字符變成'x'字符

# b.py
str = None
with open('a.txt', 'r') as f:
    str = f.readline()
operation_need_many_time()#這是一個費(fèi)時操作

str = str.replace('d','x')
with open('a.txt', 'w') as f:
    f.write(ste)

那么如果此時同時運(yùn)行a.py和b.py,看起來會得到錯誤的結(jié)果
那么如何在a.py運(yùn)行時鎖上a.txt這個文件?
即,在a.py運(yùn)行時,其他程序不能對a.txt進(jìn)行寫操作


我再網(wǎng)上查如何如何給文件加鎖,查到的是使用fcntl.flock
但是我也看到這個是個建議鎖,假如a.py的編寫者很機(jī)智檢測了,而b.py的編寫者是個初學(xué)者,沒有進(jìn)行檢測,那似乎也沒什么效果
提前感謝回答的各位

回答
編輯回答
離魂曲

你問的問題是個偽需求,你就像在提問,我想實(shí)現(xiàn)某些需求但我又不想加上實(shí)現(xiàn)這些需求所需的代碼一樣

fcntl.flock()有個參數(shù)鎖類型
LOCK_EX:表示創(chuàng)建一個排他鎖,在任意時間內(nèi),一個文件的排他鎖只能被一個進(jìn)程擁有

2018年5月12日 10:55