2014-09-11 8 views
0

멀티 플랫폼/다중 프로세스 파일 로깅을 위해 ConcurrentLogHandler을 사용했습니다.파이썬 동시 로깅 읽기

이제 로그의 '원 자성'부분을 읽었는지 확인하고 싶습니다. 예를 들어 로그 라인의 절반을 읽지 않으려 고합니다. 동시 파일 로거 실제로 한 사람이 ConcurrentLogHandler 파일에 (공유) LOCK_SH를 사용하는 연습이 파일에 LOCK_EX (전용)를 수행? 나는 모듈 서비스에서 그런 읽기를 볼 수 없다.

아니면 다른 파이썬 모듈을 사용하는 다중 읽기/단일 쓰기와 같은 경험이 있습니까?

답변

1

ConcurrentLogHandler 바로 OS가 제공하는 도구 POSIX (에 fcntl.flock, Windows에서 win32file.LockFileEx를) 잠금 파일을 사용 (하지 않고 다시 손으로 모든 것을 코딩), 그래서 당신이 파일에 대한 LOCK_SH을 경우 문제가 안된다 ConcurrentLogHandlerLOCK_EX을 가져 가려고 할 때 잠금을 존중합니다. '당신에게 로그 핸들러에서 다른 hiddent 잠금이 있었다

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

좋아, 내가 시도해야합니다, 그것은 나에게 보이지만 : 그것을 할 수있는 가장 쉬운 방법은 ConcurrentLogHandler에 포함 년대 portalocker module를 사용하는 것 맞습니다. 적어도 프로토 락커의 실제 잠금 장치는 대기 할 것입니다. 고마워 – Marcvs