2014-09-11 102 views
0

我一直在使用ConcurrentLogHandler用於多平臺/多進程文件日誌記錄。Python併發日誌讀取

現在我想確定我正在閱讀日誌中的「原子」部分,也就是說我不想讀取例如半個日誌行。併發文件記錄器實際上對該文件執行LOCK_EX(不包括),是否有人在ConcurrentLogHandler文件上使用LOCK_SH(共享)?在模塊服務中我看不到這樣的讀取。

或者你是否有這樣的使用另一個python模塊的多讀/單寫的經驗? (無需再次編碼用手一切)

回答

1

ConcurrentLogHandler只是使用文件鎖定工具OS提供(fcntl.flock POSIX上,win32file.LockFileEx在Windows上),所以如果你拿上文件LOCK_SH不應該有任何的問題; ConcurrentLogHandler會在嘗試使用LOCK_EX時尊重鎖定。要做到這一點,最簡單的方法是使用已經被包含ConcurrentLogHandlerportalocker module

import portalocker 

with open("logfile.txt") as f: 
    portalocker.lock(f, portalocker.LOCK_SH) 
    for line in f: 
     # do stuff with each line 
# file will be unlocked when its closed. 
+0

好吧,我試試,在我看來有在日誌Handler其他一些hiddent鎖,但你」在右邊,它至少會爲protalocker的實際鎖定排隊。謝謝 – Marcvs 2014-09-12 12:22:42