2016-07-26 81 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