2016-07-26 3 views
-1

지속적으로 업데이트되고 회선을 계속 사용하는 로그 파일을 수신하려고합니다. 내가 듣는 파일이 여러 개 있습니다. 로그는 jboss 인스턴스로 구분되어 있으므로 모두 함께 데이터베이스에 삽입해야합니다.실시간으로 여러 파일 읽기?

나는 5419888 질문에서 연속적으로 파일을 읽는 방법에 대한 좋은 예가 있지만이 코드는 시간별로 하나의 파일 만 읽습니다. 모든 코드를 읽으려면 다음 코드를 시도했지만 파일 배열에서 찾은 첫 번째 파일 만 듣습니다.

어떻게하면 동시에 모든 파일을 처리 할 수 ​​있습니까?

import time 
from glob import glob 

def follow(thefile): 
    thefile.seek(0,2) 
    while True: 
     line = thefile.readline() 
     if not line: 
      time.sleep(0.1) 
      continue 
     yield line 



if __name__ == '__main__': 
    for log in glob("/logs/xxx/production/jboss/yyy*/xxx-production-zzzz*/xxx-production-zzzz*-xxx-Metrics.log"): 
     logfile = open(log, "r") 
     loglines = follow(logfile) 

     for line in loglines: 
      print line, 
다음과 같은 코드를 사용하여 같은 시간에 각 파일의 라인을 인쇄 할 수 있습니다
+0

http://stackoverflow.com/documentation/python/544/multithreading#t=201607261842139282503 –

+0

어쩌면 원하는 각 파일에 대한 스레드를 만들고 대상 함수로 정의한 follow() 함수를 설정하는 것입니다. – theVoid

+0

@ Rawing이 상황을 내 상황에 적용하려고 시도했지만 잘 이해하지 못했습니다. 하지만 고마워. – davis

답변

2

:

lock = threading.Lock() 

def printFile(logfile): 
    loglines = follow(logfile) 
    for line in loglines: 
     #only one thread at a time can print to the user 
     lock.acquire() 
     print line 
     lock.release() 



if __name__ == '__main__': 
    for log in glob("/logs/xxx/production/jboss/yyy*/xxx-production-zzzz*/xxx-production-zzzz*-xxx-Metrics.log"): 
     logfile = open(log, "r") 
     t = threading.Thread(target = printFile,args = (logfile,)) 
     t.start() 
+0

이것은 나를 위해 매우 잘 작동했습니다. 감사! – davis

+0

@davis 나는 너를 도울 수있어서 기뻐. – theVoid