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